Scrapy:3个不同页面上的项目详细信息

时间:2014-01-13 10:00:01

标签: python scrapy

我必须抓一些信息在一个页面上的内容,然后在该页面上有一个包含更多信息的链接,然后是第三条信息可用的另一个URL。

如何设置我的回调以便将所有这些信息放在一起?在这种情况下我是否必须使用数据库,还是可以将其导出为CSV?

1 个答案:

答案 0 :(得分:1)

首先要说的是你有正确的想法 - 回调是解决方案。我已经看到使用urllib或者类似于fetch依赖页面,但是完全利用Scrapy下载机制比使用来自另一个库的一些同步调用更为可取。

请参阅Scrapy文档中有关此问题的示例: http://doc.scrapy.org/en/latest/topics/request-response.html#passing-additional-data-to-callback-functions

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    # parse response and populate item as required
    request = 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']
    # parse response and populate item as required
    item['other_url'] = response.url
    return item

您的第三页数据是从第一页还是第二页链接的页面?

如果从第二页开始,您可以只扩展上面的机制并让parse_page2返回一个带有回调到新parse_page3的请求。

如果从第一页开始,您可以让parse_page1填充request.meta ['link3_url']属性,parse_page2可以从该属性构建后续请求网址。

注意 - 这些“二级”和“三级”网址不应该从正常的抓取过程(start_urls和规则)中发现,而应该从parse_page1 / parse_page2中的响应(使用XPath等)构建。

抓取,回调结构,管道和项目构建都与数据导出无关,因此CSV将适用。