我正在尝试实现一个抓爬网,该爬网使用以下代码的脚本开始。
let id =parseInt(this.state.tbl);
fetch(`http://192.168.254.100:3308/OrdName/ordName/${id}`)
.then((response) => response.json())
.then((responseData) => {
this.setState({ menu_name: responseData })
})
因此,使用CrawlerRunner在执行蜘蛛程序时不会收到项目级别的settings.py配置。通用抓取工具接受三个参数,其中一个是起始网址列表。
除了在蜘蛛网中设置custom_settings之外,如何将settings.py加载到CrawlerRunner进程中?
答案 0 :(得分:2)
即使我的情况与您的情况并非100%相同,我也将尽力回答这个问题,但是,我遇到了类似的问题。
典型的scrapy项目结构如下:
scrapy.cfg
myproject/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
spider1.py
spider2.py
...
包含scrapy.cfg
文件的目录被视为项目的根目录。
在该文件中,您将看到以下内容:
[settings]
default: your_project.settings
[deploy]
...
运行要调用Spider的主脚本以一组特定的设置运行时,应将main.py
脚本与scrapy.cfg
文件放在同一目录中。
现在从main.py
开始,您的代码将必须创建一个 CrawlerProcess 或 CrawlerRunner 实例来运行蜘蛛,可以使用设置对象或字典,如下所示:
process = CrawlerProcess(settings={
'FEED_FORMAT': 'json',
'FEED_URI': 'items.json'
})
---------------------------------------
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
该dict情景有效,但麻烦,因此 get_project_settings()调用可能会引起人们的更大兴趣,我将在此进行扩展。
我有一个大型的scrapy项目,其中包含多个共享许多相似设置的蜘蛛。因此,我有一个 global_settings.py 文件,然后每个蜘蛛中都包含特定的设置。由于共享设置的数量众多,我喜欢将所有内容保持整洁的想法放在一个文件中,而不是复制和粘贴代码。
经过大量研究后,我发现最简单的方法是使用 get_project_settings()函数实例化 CrawlerProcess / Runner 对象,发现 get_project_settings 使用scrapy.cfg
中 [设置] 下的 默认 值来找到项目具体设置。
因此,对于您的项目,请确保scrapy.cfg
设置默认值 的值在您调用 get_project_settings( )。
我还要补充一点,如果您有多个用于多个scrapy项目的设置文件,并且想要共享根目录,则可以将其添加到scrapy.cfg
中,如下所示:
[settings]
default = your_project.settings
project1 = myproject1.settings
project2 = myproject2.settings
将所有这些设置添加到根目录配置文件中,将使您有机会在脚本中随意切换设置。
正如我之前说过的那样,对现成的 get_project_settings()调用将从scrapy.cfg
文件中为蜘蛛加载 default 值的设置文件( your_project.settings (在上面的示例中),但是,如果要在同一过程中更改用于下一个蜘蛛运行的设置,则可以修改为要启动的蜘蛛加载的设置。>
这有点棘手和“ hackey”,但对我有用...
在第一次调用 get_project_settings()之后,将设置一个名为 SCRAPY_SETTINGS_MODULE 的环境变量。此环境变量值将设置为scrapy.cfg
文件中您的 default 值。要更改在创建的流程实例(CrawlerRunner / Process-> process.crawl('next_spider_to_start'))中运行的后续蜘蛛程序的设置,将需要对该变量进行操作。
这是在当前实例化有get_project_settings()的当前流程实例上设置新设置模块的步骤:
import os
# Clear the old settings module
del os.environ['SCRAPY_SETTINGS_MODULE']
# Set the project environment variable (new set of settings), this should be a value in your scrapy.cfg
os.environ['SCRAPY_PROJECT'] = 'project2'
# Call get_project_settings again and set to process object
process.settings = get_project_settings()
# Run the next crawler with the updated settings module
process.crawl('next_spider_to_start')
get_project_settings()刚刚将您的搜寻器流程实例的当前流程设置(Twisted Reactor)更新为 myproject2.settings 。
这一切都可以通过主脚本来完成,以操纵蜘蛛及其设置。就像我之前说过的那样,我发现只拥有具有所有共同点的全局设置文件,然后在蜘蛛本身中设置蜘蛛特定设置就容易了。通常这要清楚得多。
Scrapy文档有点粗糙,希望这对某人有帮助...