【发布时间】:2012-03-21 19:57:30
【问题描述】:
我有一个网站,我的爬虫需要遵循一个序列。因此,例如,它需要在开始执行 a2 之前执行 a1、b1、c1 等。a、b 和 c 中的每一个都由不同的解析函数处理,并且相应的 url 在请求对象中创建并生成。下面大致说明了我正在使用的代码:
class aspider(BaseSpider):
def parse(self,response):
yield Request(b, callback=self.parse_b, priority=10)
def parse_b(self,response):
yield Request(c, callback=self.parse_c, priority=20)
def parse_c(self,response)
final_function()
但是,我发现爬行的顺序似乎是 a1,a2,a3,b1,b2,b3,c1,c2,c3,这很奇怪,因为我认为 Scrapy 应该首先保证深度。
顺序不必严格,但我正在抓取的网站有一个限制,因此 Scrapy 需要在 5 级 bs 被抓取之前尽快开始抓取 c 级。如何实现?
【问题讨论】:
-
如果忽略优先级设置会怎样?
-
同样,我尝试增加优先级是想看看我是否能影响结果。
-
Srcrapy 不会使用 BaseSpider 自动爬取。由于您使用的是“BaseSpider”,因此显示您生成请求 a1、b1、c1、a2、b2、c2 的代码非常重要(有些可能由“Start-Urls”设置......不仅仅是 'b , c"。
标签: python web-scraping scrapy