2017-09-24 14 views
1

私は傷病を学んでいて、今はそのシェルで遊んでいます。簡単な練習として、私はこのサイトから可視の部屋の画像を抽出したいと思います: https://www.gumtree.com/flats-houses/london。 シェルをオフに発射した後:治療とクロムのツールは同じ値を返しません

scrapy shell "https://www.gumtree.com/flats-houses/london" 

を私は仕事をすることになっている以下のような簡単なコマンドを使用しています:

response.xpath("//div[@class='listing-side']/div[@class='listing-thumbnail']/img/@src").extract() 

をしかし、それは、25個の値を30の要素のリストを返します。しかし、空文字列です。最初に、私はxpathに間違った何かがあったに違いないと思ったので、私はクロムツールでそれをテストしました。そして、それはイメージURLの完全なリストを返す魅力のように働くと言わなければなりません。期待どおりのすべて。しかし、なぜ治療は同じではありませんか?

EDIT:

ああ申し訳ありませんが、実際にこのサイトの場合には、シェル1は、以下のコマンドを発行する必要があります開始します。

shell -s USER_AGENT="Mozila/5.0" "https://www.gumtree.com/flats-houses/london" 

言い換えれば、ユーザエージェントを指定する必要があります。このようにそれを行うに

答えて

1

試してみてください。

listings = response.xpath("//div[@class='listing-thumbnail']") 
images = [listing.xpath('.//img/@src').extract()[1] for listing in listings] 

「画像は」すべてのリスト画像付きリストです。

+0

が、私のアプローチにはない、なぜ私は理解していない:

for item in response.xpath("//img[@itemprop='image'][not(@aria-hidden)]/@src").extract(): print(item) 

とCSSセレクタを使用して、これを試してみてください。私が "src"属性を "data-lazy"に変更すると、予想通りに動作するようになりました。ここで留意すべきことは、両方の方法がクロム工具で同等に機能することである。この行動を説明する方法はありますか? – Albert

+2

@Albert、スクレイパーを作成する前に、JavaScriptを無効にしてからスクレイピングのロジックを考えてください。そうでなければ、ブラウザと治療の動作の間で混乱するでしょう。 –

+0

@タルンラルワニあああまりにも!何らかの理由で私はそれについて考えなかった。しかし、今はすべてが明確です。ありがとうございました! – Albert

1

途中です。あなたには解決策があります。あなたの期待通り。動作しているよう

for item in response.css("[itemprop='image']:not([aria-hidden])::attr(src)").extract(): 
    print(item) 
+0

ありがとうございました! – Albert

関連する問題