scrapy传递非url参数给回调函数的方法?

1 把scrapy得到的数据传给下一个函数,传递的数据不是url

2
def parse(self, response):

    soup = BeautifulSoup(response.body,'lxml')
    item = {}
    item['stock'] = [i.string.split(':')[0] for i in soup.find_all('a', class_='fxx_wb')]  
    item['source'] = [i.string for i in soup.find_all('td', style='padding-left:5px')[0::4]
    
    

def handler(self):

do something with item

3 自己的想法是把item这个变量传给handler这个函数,看了一下资料 yield scrapy.Request(url, callback=self.handler) 传递url参数并且将访问URL后的response的值传递给回调函数的。请问有没有直接将这个变量传递给下一个回调函数的方法?变量类型是字典或者列表的,不是URL类型

阅读 5.2k
1 个回答

你看文档没有看全,答案很简单,就是用response.meta,具体可以参考下面的代码

class MySpider(BaseSpider):
    name = 'myspider'
    start_urls = (
        'http://example.com/page1',
        'http://example.com/page2',
        )

    def parse(self, response):
        # collect `item_urls`
        for item_url in item_urls:
            yield Request(url=item_url, callback=self.parse_item)

    def parse_item(self, response):
        item = MyItem()
        # populate `item` fields
        yield Request(url=item_details_url, meta={'item': item},
            callback=self.parse_details)

    def parse_details(self, response):
        item = response.meta['item']
        # populate more `item` fields
        return item

或者直接看文档调试(Debugging)Spiders

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题