2016-08-28 29 views

答えて

0

Spiderをサブクラス化していますが、start_urlsがあるので、CrawlSpiderを使用すると思います。

rules = (
    Rule(LxmlLinkExtractor(restrict_xpaths='//div[@class="Q- tpList"]/div/a/@href'), callback='parse_page'), 
) 

def parse_page(self, response): 
    ... 

あなたは、このクラス名を修正する必要があり、同様のスペースを削除します:

//div[@class="Q- tpList"]/div/a/@href 
       ^^^ 
parseが実際に新しいリンクを見つけるために CrawlSpiderによって内部的に使用されているので、このケースでは、クロールするために、あなたの構造を修正する必要があります

最後に、あなたはScrapyの古いバージョンを使用していると思います。後で切り替えるのが難しくなるため、古いAPIを使用してコードを追加する前にアップグレードすることをおすすめします。今scrapyがリンク抽出の唯一の1種類があるので、あなたはどちらかに古いscrapyのバージョンを使用してか悪いの輸入をしている

+0

@Blender 'start_urls'は' CrawlSpider'を排他的ではありません。おそらく 'rules'を意味していますか?これはCrawlSpiderの排他的なパラメータです。 – Granitosaurus

+0

@Blenderあなたが言ったように私のコードを改訂しましたが、まだ動作しません〜LxmlLinkExtractor restrict_xpathsエラーが発生する可能性はありますか? –

0

まず最初は、 - (LxmlExtractor名前が変更されます)LinkExtractor

を私はこれをテストしてみた、それが完璧に動作します微細:XPathの@classチェックイン

$ scrapy shell 'http://news.qq.com/' 
from scrapy.linkextractors import LinkExtractor 
LinkExtractor(restrict_xpaths=['//div[@class="Q-tpList"]/div/a']).extract_links(response) 
# got 43 results 

注スペースなし、それはaノードなくLinkExtractor抽出ノードため@href属性ではないパラメータを指します。