Scrapy:将来自不同链接的抓取数据关联到1个项目/模型

时间:2014-05-23 11:20:29

标签: python scrapy

考虑我有3个链接ABC

AB是指向网页的链接,C是指向需要下载的文件的链接。

我的刮刀是这样做的:

    来自页面A
  1. :提取元数据,提取指向页面B
  2. 的链接 来自第B页的
  3. :提取下载链接C
  4. 来自C:下载/保存文件
  5. 注1 :我使用3个不同的Rule来提取A个链接,B链接和C个链接

    问题 问题是,我不知道如何将项目(来自页面A的元数据)与来自链接C的下载文件相关联。

    目前,在Rule链接的A的解析回调方法中创建了一个项目,该文件保存在C链接的回调方法中

    项目和/或模型(我使用SQLALchemy在DB中存储,使用管道)需要包含元数据+下载文件的名称。

    有没有人知道如何将元数据与下载文件的名称相关联?

    Note2 :我使用规则系统,因为它可以使用新规则轻松扩展,规则可以在其他蜘蛛中重复使用。

1 个答案:

答案 0 :(得分:2)

我认为这种方法具有近似性:

def parse(self, response):
    sel = Selector(response)

    if response.url = 'link_to_A':
        i = new Item()
        i['meta_1'] = sel.xpath('//selector')
        i['meta_2'] = sel.xpath('//selector')

        link_to_B = sel.xpath('//selector')

        yield Request(url=link_to_B, meta={'item': i})

    elif response.url = 'link_to_B':
        i = response.request.meta['item']
        i['link_file'] = sel.xpath('//selector')

        return i