我试图实现一个垃圾蜘蛛,这是开始使用脚本如下代码。在
from scrapy.crawler import CrawlerRunner
from scrapy_app.scrapy_app.spiders.generic import GenericSpider
....
class MyProcess(object):
def start_my_process(self, _config, _req_obj, site_urls):
runner = CrawlerRunner()
runner.crawl(GenericSpider,
config=_config,
reqObj=_req_obj,
urls=site_urls)
deferred = runner.join()
deferred.addBoth(lambda _: reactor.stop())
reactor.run()
....
所以,使用crawlarrunner,我没有收到项目级别设置.py执行spider时的配置。通用spider接受三个参数,其中一个是起始url的列表。在
我们如何加载设置.py对CrawlerRunner进程执行的操作,而不是在spider中设置自定义的\u设置?在
我会尽力回答这个问题,尽管我的情况和你的不完全一样,但是,我也有类似的问题。在
典型的垃圾项目结构如下所示:
包含
scrapy.cfg
文件的目录被视为项目的根目录。在在该文件中,您将看到如下内容:
^{pr2}$当运行调用spider以使用特定设置集运行的主脚本时,
main.py
脚本应该与scrapy.cfg
文件位于同一目录中。在现在,从
main.py
开始,您的代码将必须创建一个CrawlerProcess或CrawlerRunner实例来运行spider,该实例可以用settings对象或dict进行实例化,如下所示:dict场景可以工作,但是很麻烦,因此get_project_settings()调用可能会引起更大的兴趣,我将对此进行扩展。在
我有一个大型的scrapy项目,其中包含多个共享大量类似设置的spider。所以我有一个_设置.py文件,然后是每个spider中包含的特定设置。由于有大量的共享设置,我喜欢在一个文件中保持所有内容整洁,而不是复制和粘贴代码的想法。在
经过大量的研究,我发现最简单的方法是用get_project_settings()函数实例化CrawlerProcess/Runner对象,关键在于获取项目设置使用{}中[settings]下的默认值查找特定于项目的设置。在
因此,在调用get\u project\u settings()时,确保项目的^{设置默认值指向所需的设置文件。在
我还将添加,如果您有多个scrapy项目的多个设置文件,并且希望共享根目录,您可以将这些文件添加到
scrapy.cfg
中,如下所示:将所有这些设置添加到根目录配置文件将允许您在脚本中随意切换设置。在
正如我之前所说,对get_project_settings()的现成调用将从
scrapy.cfg
文件(您的_项目.设置但是,如果要更改同一进程中下一个spider运行所使用的设置,则可以修改为要启动的蜘蛛加载的设置。在这有点棘手和“骇客”,但它对我有效。。。在
在第一次调用get_project_settings()之后,将设置一个名为SCRAPY_settings_MODULE的环境变量。此环境变量值将设置为
scrapy.cfg
文件中的默认值。更改用于在创建的流程实例中运行的后续蜘蛛的设置(crawlarrunner/process>;进程.爬网('next_spider_to_start')),此变量将需要被操作。在要在当前流程实例上设置一个新的设置模块,该流程实例以前已用该模块实例化了get_project_settings():
get_project_settings()刚刚为您的爬虫进程实例将当前进程设置(Twisted Reactor)更新为myproject2.settings。在
所有这些都可以通过主脚本来操作蜘蛛及其设置。正如我之前所说的,我发现只需要一个包含所有共性的全局设置文件,然后在spider中设置特定于spider的设置会更容易。这通常要清楚得多。在
刮痧医生有点粗糙,希望这能帮助某人。。。在
相关问题 更多 >
编程相关推荐