如何用scrapy将多个页面的数据收集到一个数据结构中

9 投票
1 回答
2587 浏览
提问于 2025-04-17 15:51

我正在尝试从一个网站上抓取数据。这个数据是由多个对象组成的,每个对象都有一组数据。
比如说,有一些人,他们有名字、年龄和职业。

我遇到的问题是,这些数据在网站上分成了两个层次。
第一层是一个包含名字和年龄的列表,每个人都有一个链接可以进入他们的个人资料页面。
而个人资料页面上会列出他们的职业。

我已经用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

撰写回答