gpt4 book ai didi

python - 当脚本在根目录之外时获取 scrapy 项目设置

转载 作者:太空狗 更新时间:2023-10-29 20:13:48 24 4
gpt4 key购买 nike

我制作了一个 Scrapy 蜘蛛,它可以从位于项目根目录中的脚本成功运行。由于我需要从同一个脚本运行来自不同项目的多个蜘蛛(这将是一个根据用户请求调用脚本的 django 应用程序),我将脚本从其中一个项目的根目录移动到父目录。由于某种原因,该脚本不再能够获取项目的自定义设置,以便将抓取的结果通过管道传输到数据库表中。这是我用来从脚本运行蜘蛛的 scrapy 文档中的代码:

def spiderCrawl():
settings = get_project_settings()
settings.set('USER_AGENT','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')
process = CrawlerProcess(settings)
process.crawl(MySpider3)
process.start()

为了从项目外部获取项目设置,是否需要导入一些额外的模块?或者是否需要对此代码进行一些添加?下面我还有运行蜘蛛的脚本代码,谢谢。

from ticket_city_scraper.ticket_city_scraper import *
from ticket_city_scraper.ticket_city_scraper.spiders import tc_spider
from vividseats_scraper.vividseats_scraper import *
from vividseats_scraper.vividseats_scraper.spiders import vs_spider

tc_spider.spiderCrawl()
vs_spider.spiderCrawl()

最佳答案

感谢这里已经提供的一些答案,我意识到 scrapy 实际上并没有导入 settings.py 文件。我就是这样修复它的。

TLDR:确保将“SCRAPY_SETTINGS_MODULE”变量设置为实际的 settings.py 文件。我在 Scraper 的 __init__() 函数中执行此操作。

考虑一个具有以下结构的项目。

my_project/
main.py # Where we are running scrapy from
scraper/
run_scraper.py #Call from main goes here
scrapy.cfg # deploy configuration file
scraper/ # project's Python module, you'll import your code from here
__init__.py
items.py # project items definition file
pipelines.py # project pipelines file
settings.py # project settings file
spiders/ # a directory where you'll later put your spiders
__init__.py
quotes_spider.py # Contains the QuotesSpider class

基本上,命令scrapy startproject scraper 在 my_project 文件夹中执行,我在外部 scraper 文件夹中添加了一个 run_scraper.py 文件,一个 main.py文件到我的根文件夹,quotes_spider.py 到 spiders 文件夹。

我的主文件:

from scraper.run_scraper import Scraper
scraper = Scraper()
scraper.run_spiders()

我的 run_scraper.py 文件:

from scraper.scraper.spiders.quotes_spider import QuotesSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
import os


class Scraper:
def __init__(self):
settings_file_path = 'scraper.scraper.settings' # The path seen from root, ie. from main.py
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', settings_file_path)
self.process = CrawlerProcess(get_project_settings())
self.spider = QuotesSpider # The spider you want to crawl

def run_spiders(self):
self.process.crawl(self.spider)
self.process.start() # the script will block here until the crawling is finished

另请注意,设置可能需要查看,因为路径需要根据根文件夹(my_project,而不是 scraper)。所以就我而言:

SPIDER_MODULES = ['scraper.scraper.spiders']
NEWSPIDER_MODULE = 'scraper.scraper.spiders'

然后重复您拥有的所有设置变量!

关于python - 当脚本在根目录之外时获取 scrapy 项目设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com