gpt4 book ai didi

python - 何时以及如何在一个 Scrapy 项目中使用多个蜘蛛

转载 作者:IT老高 更新时间:2023-10-28 20:56:06 25 4
gpt4 key购买 nike

我正在使用 Scrapy,非常棒!构建爬虫的速度如此之快。随着网站数量的增加,需要创建新的蜘蛛,但是这些网站都是同一类型的,所有这些蜘蛛都使用相同的项目、管道、解析过程

项目目录的内容:

test/
├── scrapy.cfg
└── test
├── __init__.py
├── items.py
├── mybasespider.py
├── pipelines.py
├── settings.py
├── spider1_settings.py
├── spider2_settings.py
└── spiders
├── __init__.py
├── spider1.py
└── spider2.py

为了减少源代码冗余,mybasespider.py有一个base spider MyBaseSpider,95%的源代码都在里面,其他所有spider都继承自它,如果spider有一些特别的东西,覆盖一些类方法,一般只需要添加几行源码就可以新建一个spider

将所有常用设置放在settings.py中,一个蜘蛛的特殊设置在[spider name]_settings.py中,如:

spider1_settings.pyspider1的特殊设置:

from settings import *

LOG_FILE = 'spider1.log'
LOG_LEVEL = 'INFO'
JOBDIR = 'spider1-job'
START_URLS = [
'http://test1.com/',
]

spider2_settings.pyspider2的特殊设置:

from settings import *

LOG_FILE = 'spider2.log'
LOG_LEVEL = 'DEBUG'
JOBDIR = 'spider2-job'
START_URLS = [
'http://test2.com/',
]

Scrapy 在启动蜘蛛之前使用 LOG_FILELOG_LEVELJOBDIR

START_URLS中的所有url都填入MyBaseSpider.start_urls,不同的spider内容不同,但是base spider使用的名称START_URLS MyBaseSpider 没有改变。

scrapy.cfg的内容:

[settings]
default = test.settings
spider1 = spider1.settings
spider2 = spider2.settings

[deploy]
url = http://localhost:6800/
project = test

运行一个蜘蛛,比如spider1:

  1. 导出 SCRAPY_PROJECT=spider1

  2. scrapy crawl spider1

但是这种方式不能用来在scrapyd中运行爬虫。 scrapyd-deploy 命令总是使用 scrapy.cfg 'settings' 部分中的 'default' 项目名称来构建 egg 文件 并将其部署到 scrapyd

有几个问题:

  1. 如果我不为每个蜘蛛创建一个项目,这是在一个项目中使用多个蜘蛛的方法吗?有没有更好的办法?

  2. 如何分离上面可以运行在scrapyd中的spider的特殊设置,减少源代码冗余

  3. 如果所有蜘蛛都使用相同的JOBDIR,那么同时运行所有蜘蛛是否安全?持久化蜘蛛状态是否已损坏?

任何见解都将不胜感激。

最佳答案

我不知道它是否会回答你的第一个问题,但我使用scrapy 和多个蜘蛛,过去我使用命令

scrapy crawl spider1 

但是如果我有不止一个蜘蛛,这个命令会激活它或另一个模块,所以我开始使用这个命令:

scrapy runspider <your full spider1 path with the spiderclass.py> 

示例:“scrapy runspider home/Documents/scrapyproject/scrapyproject/spiders/spider1.py”

希望对你有帮助:)

关于python - 何时以及如何在一个 Scrapy 项目中使用多个蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071905/

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