2014-05-23 81 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