2012-12-28 86 views
3

我是scrapy的新手。在items.py中,我聲明瞭2個ItemClass,名爲ItemClass1和ItemClass2。一個蜘蛛方法parseUrl獲取html和抓取數據並將其放入各個項目類的列表中。scrapy單蜘蛛通過多個項目類到管道

e.g: 
C1Items = [] 
C1Item = ItemClass1() 
#scrape data 
C1Items.append(C1Item) 
... 
C2Items = [] 
C2Item = ItemClass2() 
#scrape data 
C2Items.append(C2Item) 
... 

finally:C1Items和C2Items包含所需的數據。

return C1Items #will pass ItemClass1 data to pipeline 
return C2Items #will pass ItemClass2 data to pipeline 

請問您能否告訴我們將C1Items,C2Items傳遞給管道的最好方法是什麼?

回答

5

要麼將​​所有不同類別的項目列入一個清單並返回該清單,或使用yield聲明:

C1Item = ItemClass1() 
#scrape data 
yield C1Item 
... 
C2Item = ItemClass2() 
#scrape data 
yield C2Item 
+0

它的工作原理。謝謝。 – learnJQueryUI

2

就在陣列組合成一個大的陣列,並返回:

return C1Items + C2Items 

或者你也可以把parseUrl與發電機功能:

yield C1Items 
yield C2Items 
+0

嗨,我試過yield但遇到錯誤:錯誤:Spider必須返回Request,BaseItem或None,得到'list' – learnJQueryUI

+0

產生C1Item然後產生C2Item爲我工作。謝謝。 – learnJQueryUI