2017-04-21 184 views
-1

我想從多個URL中刮取信息。我使用下面的代碼,但它不起作用。請有人指出我出錯的地方?使用scrapy中的for循環從多個URL中刮取信息

import scrapy 

class spider1(scrapy.Spider): 
    name = "spider1" 
    domain = "http://www.amazon.com/dp/" 
    ASIN = ['B01LA6171I', 'B00OUKHTLO','B00B7LUVZK'] 

    def start_request(self): 
     for i in ASIN: 
      yield scrapy.Request(url=domain+i,callback = self.parse) 

    def parse(self, response): 
     title =response.css("span#productTitle::text").extract_first().strip() 
     ASIN_ext = response.xpath("//input[@name='ASIN']/@value").extract_first() 
     data = {"ASIN":ASIN_ext,"title":title,} 
     yield data 
+1

請解釋你會得到什麼錯誤? –

+0

日誌沒有顯示任何錯誤。但只是說,0頁被抓取。 – user45857

回答

4

你只需要一個「s」添加到第一個功能

def start_requests(self): 

細微的差別,但Scrapy查找特定功能,所以它必須完全匹配。

+0

謝謝!如果我將「域」和「ASIN」變量移動到start_requests()塊中,它將起作用。我是Python和scrapy的新手。我可以如何讓這兩個變量可以訪問類中定義的所有函數? – user45857

+0

就你而言,只需在引用它們時用類名稱加前綴即可。您定義它們的方式很好,但是當您參考時,它將是spider1.domain和spider1.ASIN。請看這裏瞭解更多關於類和對象變量的區別:https://www.ibiblio.org/g2swap/byteofpython/read/class-and-object-vars.html –

+0

@ user45857,可以使用類屬性在類方法中作爲第一個參數傳遞的'self'對象,例如'def start_request(self): for self in.ASIN:' –