Python用钉子双向爬行

2022-05-21 07:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读Dimitrios Kouzis Loukas的learning scrapy。实际上,我有一个关于第三章第58页Two-direction crawling with a spider部分的问题。你知道吗

原始代码如下:

def parse(self, response):
# Get the next index URLs and yield Requests
    next_selector = response.xpath('//*[contains(@class,"next")]//@href')
    for url in next_selector.extract():
        yield Request(urlparse.urljoin(response.url, url))

# Get item URLs and yield Requests
    item_selector = response.xpath('//*[@itemprop="url"]/@href')
    for url in item_selector.extract():
        yield Request(urlparse.urljoin(response.url, url), 
      callback=self.parse_item)`

但根据我的理解,第二个循环块是否应该包含在第一个循环块中,这样我们就可以先下载索引页,然后下载第一页中的所有信息页,然后再进入下一个索引页?你知道吗

所以我只想知道原始代码的操作顺序,请帮忙!你知道吗


Tags: and代码selfurlgetparseresponseitemrequestsurlsselectorxpathnexthrefyield
1条回答
网友
1楼 ·

你真的不能合并这两个循环。你知道吗

其中产生的Request对象具有不同的回调。
第一个将由parse方法处理(它似乎在解析多个项的列表),第二个由parse_item方法处理(可能解析单个项的细节)。你知道吗

至于刮削的顺序,scrapy(默认情况下)使用后进先出队列,这意味着将首先处理创建的最后一个请求。
但是,由于scrapy的异步特性,不可能说出确切的顺序。你知道吗