0

私はPythonを学び、Web Scrapingを試みました。 通常のGoogle検索ではGoogleの結果ページを削り取ることができましたが、そのページはidkの価値が低下しました。 Google画像検索でも同じように試しましたが、同様に減価償却されています。ブラウザに表示されているようには表示されません。リクエストしたのと同じページが表示されないのはなぜですか?

Hereさんのマイコードです。

from bs4 import BeautifulSoup 
import requests 
from PIL import Image 
from io import BytesIO 

search = input("Search for : ") 
params = {"tbm": "isch", "source": "hp", "q": search} 
r = requests.get("https://www.google.com/search", params=params) 
print("URL :", r.url) 
print("Status : ", r.status_code, "\n\n") 

f = open("ImageResult.html", "w+") 
f.write(r.text) 

たとえば、「Goku」を検索します。 Google画像からthisページが返されます。

最初の画像をクリックすると、ポップアップが開きます。または、Ctrl +クリックを押します。私はthisページに達します。

このページでは、実際の画像のURLに、現在のURLまたは「画像の表示」ボタンでのリンクからアクセスできることがわかります。しかし、問題は、私がこのページをリクエストしたときに得ることができるページのバージョンでこのページ/ポップアップに到達できないことです。

更新日:私はpageを共有しています。

+1

最初に:Googleは、通常、要素を挿入するためにJavaScriptを使用するページを送信します。ブラウザがjavaScriptを使用しない場合、別のタグを持つページを送信します。 '要求'はJavaScriptを実行できないので、ブラウザで取得したものとは異なるタグを取得し、Chrome/FirefoxのDevToolに表示されます。ブラウザでJavaScriptをオフにしてGoogleにロードし、 '要求 'が何を得ることができるかを確認してください。 – furas

+0

おかげさまで「@furas」がありました。それは私が探していた正確な答えでした! JavaScriptを実行できる 'requests'に代わる方法はありますか?私の必要に応じて、JavaScript対応の出力が必要だと思います。 –

+1

あなたは[Selenium](http://selenium-python.readthedocs.io/)を使用して、ページを読み込んでJavaScriptを実行するブラウザを制御できます。「ヘッドレス」ブラウザ(ブラウザウィンドウを表示しない)を使用することもできます。 [PhantomJS](http://phantomjs.org/)と[PhantomPy](https://phantompy.readthedocs.io/en/latest/)。 [Splash](https://splash.readthedocs.io/en/stable/)も参照してください。しかし、私はJavaScriptを使用しないGoogleページで作業しようとします。主に同じデータがありますが、HTMLのタグは異なります。 'Selenium'はブラウザを使わなければならないので、動作が遅くなります。 – furas

答えて

0

これは、ユーザーエージェントの文字列、Cookie、Googleの実験などの多くの要素に依存します。 Googleは多くのユーザーに同じコンテンツの異なる方法を提供することで知られています。検索では、サイト速度とユーザーエージェントに基づいて異なるページを読み込みます.Googleは、A/Bテストを動的に実装するために、 。

+0

ああ!私が何をしようとしているのか? –

+0

はい、あなたのWebパーサーやスクレーパーをあなたのpythonの出力に基づいて設計し、より良いクラスとデータの一般化を見つけることもできます。実験を避けるためにスクリプトをリロードすることもできます。答えが正しければアップヴォートしてください –

関連する問題