【问题标题】:How do I merge results from target page to current page in scrapy?如何将目标页面的结果合并到scrapy中的当前页面?
【发布时间】:2012-01-18 01:21:18
【问题描述】:

需要scrapy中的示例,了解如何从一个页面获取链接,然后点击此链接,从链接页面获取更多信息,并与第一页的一些数据合并。

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    在首页部分填写您的项目,然后将其放入您请求的元数据中。当调用下一页的回调时,它可以将部分填充的请求,放入更多的数据,然后返回。

    【讨论】:

    • 谢谢,我在我的 var: links[i] 中得到了内部链接 togoto 然后我尝试在一个循环内(对于每个外部页面)执行此操作:for i in range(0,len(categories )): print categories[i] + ' : ' + links[i] item = LectscrapItem() item['category'] = categories[i] yield FormRequest(links[i],method='GET',callback=self .parseVideo, meta={'item':item}) 和 parseVideo 里面我做了: print 'im here' 我没看到我在这里打印...请问我做错了什么?
    • @Jason,我没有使用过 FormRequest,但是...FormRequest(links[i],method='GET',callback=self.parseVideo, meta={'item':item}) 为什么需要没有 formdata 参数的 FormRequest?为什么不是一个简单的请求?
    • 好的,所以我更新为请求,现在它看起来像这样:' print 'initem going to video' yield Request(links[i], callback=self.parseVideo) '并且在我的方法中:parseVideo我有这个:' def parseVideo(self, response): print 'inhere' ' 但是当我得到第一次打印时,我没有得到'inhere'打印......我不明白为什么它不被调用..
    【解决方案2】:

    有关传递meta 数据和请求对象的更多信息在这部分文档中进行了具体描述:

    http://readthedocs.org/docs/scrapy/en/latest/topics/request-response.html#passing-additional-data-to-callback-functions

    这个问题也与:Scrapy: Follow link to get additional Item data?

    【讨论】:

      【解决方案3】:

      来自scrapy documntation的例子

      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
          return request
      
      def parse_page2(self, response):
          item = response.meta['item']
          item['other_url'] = response.url
          return item
      

      【讨论】:

        【解决方案4】:

        Scrapy 文档代码的一点图解

        def start_requests(self):
                yield scrapy.Request("http://www.example.com/main_page.html",callback=parse_page1)
        def parse_page1(self, response):
            item = MyItem()
            item['main_url'] = response.url ##extracts http://www.example.com/main_page.html
            request = scrapy.Request("http://www.example.com/some_page.html",callback=self.parse_page2)
            request.meta['my_meta_item'] = item ## passing item in the meta dictionary
            ##alternatively you can follow as below
            ##request = scrapy.Request("http://www.example.com/some_page.html",meta={'my_meta_item':item},callback=self.parse_page2)
            return request
        
        def parse_page2(self, response):
            item = response.meta['my_meta_item']
            item['other_url'] = response.url ##extracts http://www.example.com/some_page.html
            return item
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          • 2020-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多