私は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を共有しています。
最初に:Googleは、通常、要素を挿入するためにJavaScriptを使用するページを送信します。ブラウザがjavaScriptを使用しない場合、別のタグを持つページを送信します。 '要求'はJavaScriptを実行できないので、ブラウザで取得したものとは異なるタグを取得し、Chrome/FirefoxのDevToolに表示されます。ブラウザでJavaScriptをオフにしてGoogleにロードし、 '要求 'が何を得ることができるかを確認してください。 – furas
おかげさまで「@furas」がありました。それは私が探していた正確な答えでした! JavaScriptを実行できる 'requests'に代わる方法はありますか?私の必要に応じて、JavaScript対応の出力が必要だと思います。 –
あなたは[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