2016-09-23 109 views
0

類的進口比如我創造了這個類parse()Python的 - 從模塊

class PitchforkSpider(scrapy.Spider): 
    name = "pitchfork_reissues" 
    allowed_domains = ["pitchfork.com"] 
    #creates objects for each URL listed here 
    start_urls = [ 
        "http://pitchfork.com/reviews/best/reissues/?page=1", 
        "http://pitchfork.com/reviews/best/reissues/?page=2", 
        "http://pitchfork.com/reviews/best/reissues/?page=3", 
    ] 

    def parse(self, response): 

     for sel in response.xpath('//div[@class="album-artist"]'): 
      item = PitchforkItem() 
      item['artist'] = sel.xpath('//ul[@class="artist-list"]/li/text()').extract() 
      item['reissue'] = sel.xpath('//h2[@class="title"]/text()').extract() 

     return item 

然後我導入module其中class屬於:

from blogs.spiders.pitchfork_reissues_feed import * 

,並試圖調用parse()在另一上下文:

def reissues(self): 

    pitchfork_reissues = PitchforkSpider() 
    reissues = pitchfork_reissues.parse('response') 
    print (reissues) 

但我得到以下錯誤:

pitchfork_reissues.parse('response') 
    File "/Users/vitorpatalano/Documents/Code/Soup/Apps/myapp/blogs/blogs/spiders/pitchfork_reissues_feed.py", line 21, in parse 
    for sel in response.xpath('//div[@class="album-artist"]'): 
AttributeError: 'str' object has no attribute 'xpath' 

我錯過了什麼?

回答

0

你調用parse用於字符串:

reissues = pitchfork_reissues.parse('response') 

我想這應該是一個變量名?像這樣:

reissues = pitchfork_reissues.parse(response) 

編輯

蜘蛛的parse方法需要scrapy.http.Response一個實例,因爲它是第一個參數,而不是一個字符串包含單詞「響應」。

我自己沒有使用Scrapy,所以我只知道我在文檔中讀到的內容,但顯然這樣的Response實例通常是由'Downloader'創建的。

看起來您正嘗試在Scrapy的平常工作流程外調用Spider的parse方法。在這種情況下,我認爲你有責任創建這樣一個響應,並將它傳遞給你的Spider時,將其稱爲parse方法。

+0

給了我下面的回溯:'reissues = pitchfork_reissues.parse(response) NameError:全局名稱'response'未定義' –

+2

那麼你需要一個scrapy.http.Response實例,它顯式地被「下載由下載者)「。參見[文檔](http://doc.scrapy.org/en/latest/topics/request-response.html#response-objects):) – Jasper