我正在尝试将多个页面废弃为一个项目:
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,......