我正在建设蜘蛛的斗志。我定义的项目如下:
class MyItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
usage=scrapy.Field()
storage=scrapy.Field()
title
来自第一页,usage
来自第二页,storage
来自第三页。
否,我尝试从如下网页中获取值
def parse_item(self, response):
links=response.xpath('somepath')
for link in links:
name=link.xpath('text()').get()
href= 'mydomain'+link.xpath('@href').get()
yield scrapy.Request(href,callback=self.parse_info,meta={"title":name})
def parse_info(self,response):
item=MyItem()
item["title"]=response.request.meta['title']
# usage
item['usage']=response.xpath("sompath").get().strip()
# storage
storagelink = response.xpath("somepath/@href").get()
item['usage'] = scrapy.Request(storagelink ,callback=self.parse_storage,meta={"title":name})
print(item)
return item
def parse_storage(self,response):
return response.xpath("somepath/text()").get().strip()
但我无法获取使用值,则控制台始终输出:
'使用':〈获取https://网址〉,
为什么?我如何将这些数据合并到项目中?谢谢!
1条答案
按热度按时间pxq42qpu1#
您将
item['usage']
设置为请求,即使它是正确的,但Scrapy是异步的,因此它不会正常工作。在for循环中声明项,通过方法传递它,并且只在最后一个方法中产生它。你也可以使用cb_kwargs),因为它更方便。