python( http://docs.python-requests.org/en/latest/ )でリクエストフレームワークを使用しようとしていますが、私がしようとしているページjavascriptを使用して必要な情報を取得します。
私は解決策をウェブ上で検索しようとしましたが、私が得ているもののほとんどをキーワードjavascriptで検索しているという事実は、javascript言語でスクレイピングする方法です。
とにかくjavascriptを使用するページで要求フレームワークを使用する方法はありますか?
JavaScriptが行っているのと同じリクエストを(Requestsライブラリを使用して)行う必要があります。任意の数のツール(ChromeおよびFirefoxに組み込まれているものを含む)を使用して、javascriptからのhttpリクエストを検査し、Pythonからこのリクエストを自分で行うことができます。
Seleniumは魅力的で便利に見えるかもしれませんが、修正できない主な問題が1つあります。それはパフォーマンスです。ブラウザが実行するすべてのことを計算することにより、より多くのパワーが必要になります。 PhantomJSでさえ、単純な要求と競合しません。ボタンをクリックする必要がある場合にのみSeleniumを使用することをお勧めします。 JavaScriptのみが必要な場合は、PyQtをお勧めします(確認するには https://www.youtube.com/watch?v=FSH77vnOGq を確認してください)。
ただし、Seleniumを使用する場合は、PhantomJSよりもChromeをお勧めします。多くのユーザーは、PhantomでWebサイトが機能しないというPhantomJSの問題を抱えています。 Chromeもヘッドレス(非グラフィカル)になります!
まず、ChromeDriverがインストールされていることを確認します。SeleniumはGoogle Chromeの使用に依存しています。
次に、URL chrome:// settings/helpで確認して、バージョン60以上のGoogle Chromeがあることを確認します
今、あなたがする必要があるのは次のコードだけです:
from Selenium.webdriver.chrome.options import Options
from Selenium import webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=chrome_options)
Seleniumの使用方法がわからない場合は、簡単な概要を以下に示します。
driver.get("https://www.google.com") #Browser goes to google.com
要素の検索:ELEMENTSまたはELEMENTメソッドを使用します。例:
driver.find_element_by_css_selector("div.logo-subtext") #Find your country in Google. (singular)
OK!要素(または要素リスト)を見つけました。しかし、私は今何をしますか?
要素elemで実行できるメソッドは次のとおりです。
特殊コマンド:
良いニュース:javascriptをサポートする要求モジュールがあります: https://pypi.org/project/requests-html/
from requests_html import HTMLSession
session = HTMLSession()
r = session('http://www.yourjspage.com')
r.html.render() # this call executes the js in the page
ボーナスとして、これはBeautifulSoup
をラップするので、次のようなことができると思います。
r.find('#myElementID').text
期待どおりにHTML要素のコンテンツを返します。
コメントするほどの評判はありませんが、パッケージ「requests_html」を使用して私の経験を共有したいと思います。
実際には、そのWebページのすべてをローカルにダウンロードして、すべてを実行します。私にはこれは非常に危険です。出力は次のとおりです。
r.html.render() # this call executes the js in the page
[W:pyppeteer.chromium_downloader] start chromium download.
Download may take a few minutes.
100%|██████████| 84299992/84299992 [00:18<00:00, 4644126.66it/s]
[W:pyppeteer.chromium_downloader]
chromium download done.
[W:pyppeteer.chromium_downloader] chromium extracted to: .../Library/Application Support/pyppeteer/local-chromium/575458