我在用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
,例如:
特别设置spider1
的spider1_settings.py
:
from settings import * LOG_FILE = 'spider1.log' LOG_LEVEL = 'INFO' JOBDIR = 'spider1-job' START_URLS = [ 'http://test1.com/', ]
特别设置spider2
的spider2_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
蜘蛛,同时运行所有蜘蛛是否安全?持久性蜘蛛状态是否已损坏?
任何见解将不胜感激.