2017-11-19 16 views
0

スクラップスパイダーは、スクラップしなければならないページへのリンクを含むページを提供する限り、うまく機能します。 今私はすべてのカテゴリには与えたくないが、すべてのカテゴリへのリンクを含むページ。 これを実現するために、別の解析関数を追加するだけでいいと思っていました。スクラブを使用した再帰的スクレイピング中の属性エラー

が、コンソール出力は、これはsome attribute refferenceが正しく動作していないことを私に伝えます

"attributeError: 'zaubersonder' object has no attribute 'parsedetails'"

私の属性のエラーが発生します。 私はオブジェクト指向に新しいですが、私はscarpyがparse_detailsを呼び出すprase_level2を呼び出しているparseを呼び出していると思っています。これは正常に動作するはずです。

以下は私の努力です。

import scrapy 


class zaubersonder(scrapy.Spider): 
    name = 'zaubersonder' 
    allowed_domains = ['abc.de'] 
    start_urls = ['http://www.abc.de/index.php/rgergegregre.html' 
       ] 




    def parse(self, response): 
     urls = response.css('a.ulSubMenu::attr(href)').extract() # links to categories 
     for url in urls: 
      url = response.urljoin(url) 
      yield scrapy.Request(url=url,callback=self.parse_level2) 

    def parse_level2(self, response): 
     urls2 = response.css('a.ulSubMenu::attr(href)').extract() # links to entries 
     for url2 in urls2: 
      url2 = response.urljoin(url2) 
      yield scrapy.Request(url=url2,callback=self.parse_details) 

    def parse_details(self,response): #extract entries 
     yield { 
      "Titel": response.css("li.active.last::text").extract(), 
      "Content": response.css('div.ce_text.first.block').extract() + response.css('div.ce_text.last.block').extract(), 
     } 

編集は:コードのタイプミスがあり、それ

答えて

1

を検索する場合、誰かにコードを修正しました。 parse_level2のコールバックはself.parsedetailsですが、この関数の名前はparse_detailsです。

だけにparse_level2yieldを変更:

yield scrapy.Request(url=url2,callback=self.parse_details) 

はそれがより良い動作するはず..and。

+0

ありがとう、これでした。私は今、ばかげている – Nivatius

関連する問題