如何在scrapy中更改请求的顺序?

时间:2016-01-12 15:11:49

标签: python scrapy

我正在尝试将多个页面废弃为一个项目:

A
|-- a
|-- b
|-- c
B
|-- a
...

通过抓取页面A及其子页面(a,b,c),我将获得1个项目。我的代码很大,但这里是缩小的版本:

class MySpider(scrapy.Spider):
    def parse(self, response):
        for li in response.xpath('//li'):
            item = MyItem()
            ...
            meta = {
                'item': item,
                'href': href,
            }
            url = response.urljoin(href + '?a')
            yield scrapy.Request(url, callback=self.parse_a, meta=meta)

    def parse_a(self, response):
        ...

        url = response.urljoin(href + '?b')
        yield scrapy.Request(url, callback=self.parse_b, meta=meta)


    def parse_b(self, response):
        ...

        url = response.urljoin(href + '?c')
        yield scrapy.Request(url, callback=self.parse_c, meta=meta)


    def parse_c(self, response):
        ...
        yield item

脚本运行正常,但问题在于:Crawler按以下顺序搜索页面:A, B, C, Aa, Ba, Ca, Ab, Bb, ...因为有太多页面要搜索没有任何内容被保存,直到所有页面都被删除。当我在解析方法上将yield更改为return时,它会按照我想要的方式A, Aa, Ab, Ac进行搜索,但它不会搜索B,C,......

0 个答案:

没有答案