如何用scrapy将多个页面的数据收集到一个数据结构中
我正在尝试从一个网站上抓取数据。这个数据是由多个对象组成的,每个对象都有一组数据。
比如说,有一些人,他们有名字、年龄和职业。
我遇到的问题是,这些数据在网站上分成了两个层次。
第一层是一个包含名字和年龄的列表,每个人都有一个链接可以进入他们的个人资料页面。
而个人资料页面上会列出他们的职业。
我已经用Python的scrapy写了一个爬虫,可以从第一层抓取数据,并且可以翻页抓取多个页面的数据。
但是,我该如何在抓取内层页面的数据时,确保这些数据能和正确的对象关联起来呢?
目前,我的输出结构是用json格式的:
{[name='name',age='age',occupation='occupation'],
[name='name',age='age',occupation='occupation']} etc
那么,解析函数能跨页面抓取数据吗?
1 个回答
9
这里有一种处理方法。当一个项目具备所有属性时,你需要一次性返回这个项目。
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