Python 3.x 如何使用Scrapy(Python3)进行广度优先搜索?
我想以广度优先搜索的方式运行爬虫程序。Python 3.x 如何使用Scrapy(Python3)进行广度优先搜索?,python-3.x,scrapy,Python 3.x,Scrapy,我想以广度优先搜索的方式运行爬虫程序。 因此,我编写了以下代码 from scrapy.spider import BaseSpider from scrapy.http import Request class MySpider(BaseSpider): start_urls = ['http://example.com/a'] def parse(self, response): next_a = response.css('.next::attr(h
因此,我编写了以下代码
from scrapy.spider import BaseSpider
from scrapy.http import Request
class MySpider(BaseSpider):
start_urls = ['http://example.com/a']
def parse(self, response):
next_a = response.css('.next::attr(href)').extract_first()
if next_a:
yield Request(next_a, callback=self.parse, priority = 3)
for b in response.css('.b::attr("href")'):
yield Request(b, callback=self.parse_b, priority = 2)
def parse_b(self, response):
pass
我希望此爬虫将按如下方式移动。a1、a2、a3、…、an、b1、b2、b3、…、bn 但实际上是这样的。
a1、b1、b2、…、b_n1、a2、b_n1+1、b_n1+2、 如何才能按预期运行?引用 Scrapy爬行的顺序是广度优先还是深度优先? 默认情况下,Scrapy使用队列存储挂起的请求,这 基本上意味着它会爬进去。这个订单比较方便 在大多数情况下。如果你真的想爬进去,你可以通过 设置以下设置: DEPTH_PRIORITY = 1 SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue' SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue' 深度\优先级=1 调度程序\u磁盘\u队列='scrapy.sques.PickleFifoDiskQueue' 调度程序\u内存\u队列='scrapy.sques.FifoMemoryQueue'