在运用scrapy框架进行爬虫时,可能需要将附加数据传递给回调函数,下面将介绍两种向回调函数传递参数的方法。
1.使用 lambda方式传递参数
请求的回调是在下载该请求的响应时将被调用的函数。将使用下载的Response
对象作为其第一个参数调用回调函数。
def parse(self, response):
a_tag_list = response.css('.list .listtitletxt')
for element in a_tag_list:
item = LuboavItem()
item['title'] = element.css('a::attr("title")').extract()[0]
item['img_url'] = self.main_url + element.css('a::attr("href")').extract()[0]
yield scrapy.Request(item['img_url'], callback=lambda response, it=item: self.others_parse(response, it),
dont_filter=True)
yield item
def others_parse(self,response,it):
it['image'] = response.xpath('//p//img/@src').extract()
yield it
2.在某些情况下,您可能有兴趣将参数传递给那些回调函数,以便稍后在第二个回调中接收参数。您可以使用该Request.meta
属性。
def parse_page1(self, response):
item = MyItem()
item['main_url'] = response.url
request = scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
request.meta['item'] = item
yield request
def parse_page2(self, response):
item = response.meta['item']
item['other_url'] = response.url
yield item
文章参考: