如何将目标页面的结果合并到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 - 如何强制页面显示面包屑菜单?