zoukankan      html  css  js  c++  java
  • scrapy实现多级页面的抓取时使用meta传递item数据的问题(转)

    name = 'doubanzufang'
    start_urls = ['https://www.douban.com/group/tianhezufang/discussion?start=50']

    def parse(self, response):
        item = ZufangItem()
        node_list = response.css(".olt>tr>td.title")
        for node in node_list:
            item['title'] = node.css("a[href]::attr(title)").extract()[0]
            item['url'] = node.css("a[href]::attr(href)").extract()[0]
            yield scrapy.Request(item['url'], meta={'item': item}, callback=self.parse_detail)

    def parse_detail(self, response):
        item = response.meta['item']
        item['poster'] = response.xpath(".//*[@id='content']/div/div[1]/div[1]/div[2]/h3/span[1]/a/text()").extract()[0]
        item['image'] = response.xpath(".//*[@id='content']/div/div[1]/div[1]/div[1]/a/img/@src").extract()[0]
        item['information'] = response.xpath(".//*[@id='link-report']/div[1]/p[1]/text()").extract()[0]
        yield item

    确认item['title'],item['url']都能获取到不止一个str
    问题:
    1:为什么我输出得到的item['title'],item['url']永远是最后一个?yield meta不应该每次都传递过去吗?
    2:我想实现获取图1标题,作者以及图2内容,把他们保存在一个item返回,怎么实现?

    问题1:应该是item保存的是字典,在for循环外声明的item每次在最后都把前面的更新了,所以url,title永远都是获取最后的值
    问题2:将item = ZufangItem()放在for循环内即可解决

    引用自:https://blog.csdn.net/q810935819/article/details/82082969

  • 相关阅读:
    koa2 nginx 服务器配置
    Spring Cloud 中OpenFeign的使用(二)
    Spring Cloud中OpenFeign的使用(一)
    Spring Cloud Alibab Sentinel服务端搭建
    asp.net core 读取 appsettings.json 节点值
    c# – AuthenticationHeaderValue与NetworkCredential
    元气
    艾维利时间管理法
    BPM/OA/审批流/工作流
    消息队列
  • 原文地址:https://www.cnblogs.com/sjfeng1987/p/10232770.html
Copyright © 2011-2022 走看看