如何将scrapy数据解析为同一页面中多个链接的相同项目?我不是想保存一个子页面链接的数据,而是等同于this示例的东西,但不同之处在于我想要从同一页面跟踪更多的一个链接:
A
----> B.1
--------> B.1.1
----> B.2
--------> B.2.2
总之,我想在根页A,B.1,B.1.1,B.2和B.2.2中保存同一项目中的不同类型的数据。 有人可以给我一个玩具示例吗?
编辑:
想象以下代码:
class MySpider(BaseSpider):
start_urls = [www.pageA.com]
def parse(self, response):
myitem = Item()
# some initial data
item['a'] = response.xpath(...).extract()
# extract all B.i links
url_Bi_list = response.xpath(...).extract()
for url_Bi in url_Bi_list:
yield Request(url_Bi,
...
callback=parseBi,meta=dict(item=myitem))
def parseBi(self, response):
my_new_item = response.meta['item']
# some second data
item['bi'] = response.xpath(...).extract()
# extract B.i.i link
url_Bii = response.xpath(...).extract()
yield Request(url_Bii,
...
callback=parseBii,meta=dict(item=my_new_item))
def parseBii(self, response):
final_item = response.meta['item']
# extract more data from B.i.i link
# some third inner data
my_new_item['bii'] = response.xpath(...).extract()
yield final_item
那么,这个代码结构会起作用吗?我不确定何时提出项目或请求......
答案 0 :(得分:3)
查询多个页面使用示例you just pointed(控制回调),并使用meta
parameter以dict
形式在回调之间传递信息,将项目传递给每个回调lo之后在最后一次回调时返回它。
def parseA(self, response):
...
myitem = MyItem()
# populate the item
...
yield Request(url=<B url>,
...
callback=parseB, meta=dict(item=myitem))
def parseB(self, response):
my_new_item = response.meta['item']
...
yield Request(url=<C url>,
...
callback=parseC, meta=dict(item=my_new_item))
def parseC(self, response):
final_item = response.meta['item']
...
yield final_item
答案 1 :(得分:0)
我看到的唯一可以做的工作是scrapy-inline-request