我对Scrapy很新(实际上这是我第一次使用它)。我正在解析一个电视节目全部演员的页面,我试图收集每个只存在于演员个人页面中的演员的信息。
以下是我的解析函数的片段:
for actor in response.css('tr.even'):
.
.
.
.
yield {
'real_name':
' '.join(actor.css('td.itemprop a span.itemprop::text').extract_first().split()),
'character_name':
' '.join(actor.css('td.character a::text').extract_first().split()),
'imdb_link': link,
'show': show,
'pic': scrapy.Request(url=link, callback=self.parse_pic)
}
对于pic参数,我想打开存储在链接中的网址,然后运行response.css('td div.image a img::attr(src)').extract_first()
以获取指向该演员图片的链接
这是我的parse_pic函数:
def parse_pic(self, response):
return response.css('td div.image a img::attr(src)').extract_first()
谢谢!
答案 0 :(得分:0)
现在您创建了一个请求,但是您没有执行它。我建议将您收集的数据存储在新请求的元数据中。
请求1:为pic创建新请求,将第1个url中的所有数据存储在元数据中,使用pic url发送新请求
请求2:从请求1收集数据(来自meta)并使用pic数据补充此数据。
for actor in response.css('tr.even'):
.
.
.
.
request = scrapy.Request(url=link, callback=self.parse_pic)
request.meta['data'] = {
'real_name':
' '.join(actor.css('td.itemprop a span.itemprop::text').extract_first().split()),
'character_name':
' '.join(actor.css('td.character a::text').extract_first().split()),
'imdb_link': link,
'show': show,
}
yield request
然后这就是parse_pic:
def parse_pic(self, response):
data = response.meta.get('data')
data['pic'] = response.css('td div.image a img::attr(src)').extract_first()
yield data