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

 汐玉Shining 发布于 2022-12-31 11:04

我在用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有一个基础蜘蛛MyBaseSpider,95%的源代码都在其中,所有其他蜘蛛都从它继承,如果蜘蛛有一些特殊的东西,覆盖一些 class methods,通常只需要添加几行源代码来创建一个新的蜘蛛

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

特别设置spider1spider1_settings.py:

from settings import *

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

特别设置spider2spider2_settings.py:

from settings import *

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

Scrapy使用LOG_FILE,LOG_LEVEL,JOBDIR推出蜘蛛之前;

所有网址START_URLS都填入MyBaseSpider.start_urls,不同的蜘蛛有不同的内容,但START_URLS基础蜘蛛中使用的名称MyBaseSpider不会改变.

内容scrapy.cfg:

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

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

运行蜘蛛,例如spider1:

    export SCRAPY_PROJECT=spider1

    scrapy crawl spider1

但这种方式不能用来运行蜘蛛scrapyd.scrapyd-deploy命令始终使用"设置"部分中的'default'项目名称scrapy.cfg来构建egg file并将其部署到scrapyd

有几个问题:

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

    如何分离上面可以运行的蜘蛛特殊设置scrapyd并减少源代码冗余

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

任何见解将不胜感激.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有