如何将目标页面的结果合并到scrapy中的当前页面?

Posted

技术标签:

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

需要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

【讨论】:

以上是关于如何将目标页面的结果合并到scrapy中的当前页面?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用scrapy规则从Wiki演员和电影页面爬行到仅演员和fimlography链接中的链接

使用 Scrapy 在 Python 中进行 Webrawling - 如何强制页面显示面包屑菜单?

如何将 create-react-app 使用的错误页面合并到自定义项目中?

scrapy爬取前端渲染页面

scrapy爬虫-1-初试页面抓取

scrapy——scrapy介绍