【发布时间】:2019-03-29 08:27:31
【问题描述】:
我的问题如下:
为了赢得时间,我想运行多个版本的一个蜘蛛。 过程(解析定义)是一样的,项目是一样的,数据库中的集合是一样的。改变的是 start_url 变量。 它看起来像这样:
"https://www.website.com/details/{0}-{1}-{2}/{3}/meeting".format(year,month,day,type_of_meeting)
考虑到日期相同,比如2018-10-24,我想同时推出两个版本:
- 版本 1
type_of_meeting = pmu - 带有
type_of_meeting = pmh的版本2
这是我的问题的第一部分。在这里我想知道我是否必须在一个蜘蛛中创建两个不同的类,例如class SpiderPmu(scrapy.Spider): 和spider.py 中的class SpiderPmh(scrapy.Spider):。但如果这是你认为我必须做的最好的方式,考虑到settings.py,pipelines.py,我不知道如何实现它。我已经从 scrapy.crawler 模块中阅读了有关 CrawlerProcess 的信息,但我不太了解如何在我的项目中实现它。 stack subject,scrapy doc。我不确定那部分
process = CrawlerProcess()
process.crawl(MySpider1)
process.crawl(MySpider2)
process.start() 必须在 spider.py 文件中。最重要的是,我不确定它是否能解决我的问题。
第二部分,是如何考虑不同的日期间隔推出多个版本。
我已经在我的蜘蛛类中创建了一些区间,例如:
year = range(2005,2019)month = range(1,13)day = range(1,32)
并把它放在一个循环中。效果很好。
但为了赢得时间,我想推出几只蜘蛛,以不同的年份间隔。
- 第一个版本
year = range(2005,2007) - 第二版
year = range(2007,2009) - 以此类推,直到
year = range(2017,2019)
同时使用七个版本意味着快七倍。
我可以为每个年份创建 7 个不同的项目,但我认为这不是最聪明的方法......而且我不确定它是否会在 7 年使用同一个集合数据库时产生冲突不同的项目同时运行。
我希望做一些类似打开 7 个命令的事情:
-
scrapy crawl spiderpmu用于版本type_of_race = pmu -
"Enter a range of year":与raw_input = 2010, 2012==>range(2010,2012) - 蜘蛛在爬行
并行,如果这是强制性的,这样做:
-
scrapy crawl spiderpmh用于版本type_of_race = pmh -
"Enter a range of year":与raw_input = 2010, 2012==>range(2010,2012) - 蜘蛛在爬行
如果需要,可能使用一个蜘蛛,或一个项目。
我该怎么办?
PS:我已经安排好了prolipo做代理,Tor网络改IP,USER_AGENT一直在变。所以,我避免被多个蜘蛛同时爬行而被禁止。我的蜘蛛对AUTOTHROTTLE_ENABLED = True 很“礼貌”。我想保持礼貌,但要更快。
Scrapy 版本:1.5.0,Python 版本:2.7.9,Mongodb 版本:3.6.4,Pymongo 版本:3.6.1
【问题讨论】: