2016-04-22 7 views
0

私はxpathをテストするために "scrapy shell"を使用していました。 それはのように見えた:結果は何もなかったが、ページのコンテンツはのコンテンツは存在しますが、xpathはそれを見つけることができませんでした。なぜですか?

<a class="shop-name-link" href="//shop103857282.taobao.com" target="_blank" 
    data-goldlog-id="/tbwmdd.1.044">长岛小两口创业</a> 

なぜが含まれてい

response.xpath("//a[@class='shop-name-link']") 

:?XPathはのように見えた

scrapy shell https://item.taobao.com/item.htm?spm=a219e.1191392.1111.1.FglWUh&id=40978681727&scm=1029.newlist-0.1.50002766&ppath=&sku=&ug=#detail 

+0

存在しないためです。リンクされたページのソースを見てください。そのような 'a'要素はありません。問題を示す[mcve]を作成し、質問自体にHTML上の部分を減らして、あなたの質問がそれ自身で立つことができるようにします。 – kjhughes

答えて

0

xpathsの検索結果に問題がある場合は、firepathまたはchrome browser dev toolsを使用してページソースを調べます。 Scrapyスパイダーは、ページソースが未レンダリングであるとみなします。 JavaScriptではレンダリングされません。スパイダーが見たときにソースを表示するには、ブラウザでFirepathをJavaScriptを無効にして使用します。

あなたの質問にリンクしているページで、クラスshop-name-linkのリンクが見つかりません。したがって、適切なリンクを与えていないか、この要素がユーザーアクションの後に表示されるか、またはこのページが異なる国の異なるユーザーに異なる方法で表示されます。あなたが持っているが、私たちが持っていないいくつかのクッキーの存在に依存している可能性もあります。

素敵なショートカットがあります:

from scrapy.utils.response import open_in_browser 
open_in_browser(response) 

これは、ブラウザでのクモからの応答を開きます。スパイダーが正確に見ているものを確認する必要があるときに使用します。多くの場合(ほとんどの場合そうでないにしても)、これはブラウザで見られるものとは異なります。

このページがどのように表示されるかの再現可能な例を共有したい場合、chrome開発ツールには、すべてのヘッダーとCookieを含む要求をクリップボードにコピーする便利な機能「カールとしてコピー」があります。それをあなたの質問に貼り付けると、人々はあなたがそれを見るときにページを見ることができます(もちろんipsにジオロケーションの制限はありません)。

+0

ありがとう! – Wallace

関連する問題