如何使用scrapy将来自多个页面的数据收集到单个数据结构中
Posted
技术标签:
【中文标题】如何使用scrapy将来自多个页面的数据收集到单个数据结构中【英文标题】:How to collect data from multiple pages into single data structure with scrapy 【发布时间】:2013-01-30 00:15:47 【问题描述】:我正在尝试从站点中抓取数据。数据结构为多个对象,每个对象都有一组数据。 例如,有姓名、年龄和职业的人。
我的问题是,这些数据在网站中分为两个级别。 比如说,第一页是姓名和年龄列表,并带有指向每个人的个人资料页面的链接。 他们的个人资料页面列表他们的职业。
我已经有一个用 python 写的爬虫,它可以从顶层收集数据并爬取多个分页。 但是,我怎样才能从内页收集数据,同时保持它与适当的链接对象?
目前,我的输出结构为 json
[name='name',age='age',occupation='occupation'],
[name='name',age='age',occupation='occupation'] etc
解析函数可以跨页面吗?
【问题讨论】:
【参考方案1】:这是您需要处理的一种方式。当 item 具有所有属性时,您需要一次 yield/return item
yield Request(page1,
callback=self.page1_data)
def page1_data(self, response):
hxs = htmlXPathSelector(response)
i = TestItem()
i['name']='name'
i['age']='age'
url_profile_page = 'url to the profile page'
yield Request(url_profile_page,
meta='item':i,
callback=self.profile_page)
def profile_page(self,response):
hxs = HtmlXPathSelector(response)
old_item=response.request.meta['item']
# parse other fileds
# assign them to old_item
yield old_item
【讨论】:
以上是关于如何使用scrapy将来自多个页面的数据收集到单个数据结构中的主要内容,如果未能解决你的问题,请参考以下文章
如何从多个数据库中收集数据并将它们绑定到单个 datagridview 中?
如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据