2014-05-23 45 views
1

想想看,我有3个环节ABCScrapy:副刮掉从不同的链接数据,1项/型号

AB是网页链接和C是它需要一个文件的链接被下载。

我刮刀curently做到这一点:

  1. A页:提取元数据,提取链接到页面B
  2. B页:提取下载链接C
  3. C:下载/保存文件

注1:我用3个不同的Rule s到提取A链接,B链接和C链接

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

目前的项目在RuleA链接和文件的解析回调方法创建保存在回调方法为C链接

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

有没有人有关于的想法如何将元数据与下载文件的名称关联?

注2:我使用的规则系统,因为它可以用新的规则很容易地扩展和规则,可以在其他蜘蛛被重用。

+1

http://doc.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Request.meta – Girish

回答

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