2016-09-23 9 views
0

からクラスの輸入インスタンス私はparse()でこのクラスを作成しました:パイソン - モジュール

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 

、私はclassが所属moduleをインポートします。

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) 

編集

Spiderのparse方法はscrapy.http.Responseのインスタンスが必要です。

私はScrapyを自分で使用していないので、私はドキュメントで何を読んでいるのか分かりますが、明らかにそのようなResponseインスタンスは通常 'Downloader'によって作成されます。

スパイダーのparseメソッドをScrapyの通常のワークフローの外に呼び出そうとしているようです。その場合、あなたはそのようなレスポンスを作成し、それをあなたのスパイダーに渡すのは、parseメソッドと呼ばれる責任があると思います。

+0

これは私に以下のトレースバックを与えます: 'reissues = pitchfork_reissues.parse(レスポンス) NameError:グローバル名 'レスポンス'が定義されていません –

+2

まあ、scrapy.http.Responseインスタンスが必要です。ダウンローダによって)」。 [the docs](http://doc.scrapy.org/ja/latest/topics/request-response.html#response-objects)を参照してください:) – Jasper