2017-10-19 9 views
0

私はスクラピー(スプラッシュあり)を学び、jsを有効にしたページの結果をスクラップするためにスパイダーを構築しています。私のスパイダーは動作し、jsページの結果を返します。しかし、それはhttps://www.zara.com/us/en/bejewelled-appliqu%C3%A9-dress-p07854034.html?v1=4818592&v2=733885治療のスプラッシュが結果を返さない

xpath used: //*[contains(concat(" ", @class, " "), concat(" ", "_product-price", " "))]//span/text() 

上記のXPathは、ブラウザで結果を返しませんが、scrapy経由で呼び出された場合の結果を返しません。このリンクから価格を返しません。ここに私のクモは、サイトから価格が返されない理由を把握助けてください

yield scrapy.Request(url, callback=self.parse_page, dont_filter=True, meta={'splash': {'args': {'wait': 5,},'endpoint': 'render.html',}}) 

を呼ぶのか?

ありがとうございます! //*[contains(concat(" ", @class, " "), concat(" ", "_product-price", " "))]//span/text()または単に//*[contains(concat(" ", @class, " ")," _product-price "))]//span/text()

のXpath @クラス=述語は、あなたがそこに持っているような複数のクラス(スペースで区切られたクラス)のために動作しません - あなたのXPathのために、この

+0

あなたのコードや設定が原因であるかどうかを確認するには、スプラッシュのページ結果のスクリーンショットを表示して確認するか、価格がある場合はドキュメントツリーを確認してください。 – jabargas

+0

ああ、ちょうどあなたのコードを見て、あなたのxpathが間違っているようです。 – jabargas

答えて

2

SplashレンダリングされたHTML出力に価格が表示されないという問題があります。スプラッシュコンソールのURLを8050ポートに置き、それはレンダリングされた出力です)。ページが正しく表示されない場合は、スプラッシュFAQから開始してください。あなたのケースでは、解決策はのスプラッシュに、--disable-private-mode Dockerの起動オプションを使用するか、LUAスクリプトにsplash.private_mode_enabled = falseを設定することです。プライベートモードを無効にすると、ページが正しくレンダリングされます。

+0

ありがとうTomáš!それはうまくいった! – user6055239

0

使用。要素を取得するには、contains()を使用する必要があります。

+0

私はあなたが指定したxpathを使ってみました。間違っているかもしれない何か他にありますか? // * [concat( ""、@class、 ")、concat(" "、" _product-price "、" "))] // span/text() – user6055239