このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピングの方法を学び、実践に役立てられるよう体系的にまとめています。
【①〜⑨まとめ】PythonでWebスクレイピングを実践する方法【サンプルコード付き】
このブログではPythonスクレイピングを初心者向けに解説していきます。順番に各記事で解説しており入門者向けです。サンプルコード付きで解説するので実践的…
最初の記事ではRequestsを使ったスクレイピングについて解説しましたが、ここではSeleniumを使ったスクレイピングの基本を解説していきます。
また、RequestsとSeleniumの違いについても説明していきます。簡単に説明すると、通常の静的なHTMLサイトであればRequestsを使って簡単にスクレイピングができます。しかし、ページを開いた後にJavaScriptを使ってデータが読み込まれるようなウェブサイトではSeleniumを使わないとスクレイピングができません。Seleniumを使うことで動的に生成されるコンテンツも含めた完全なページが取得できるようになるのです。
Seleniumを使うことでページのクリック、スクロール、フォーム入力といったブラウザのユーザー操作ができるため、スクレイピングの自由度が上がります。しかしブラウザを自動操作することになるので、動作はRequestsよりも遅いです。
ここで紹介するサンプルコードはあくまでコード自体を分かりやすく説明するためのものです。実際にスクレイピングしたいWebサイトのurlに置き換えて実施してください。
注意: 対象ウェブサイトの利用規約を確認しましょう。スクレイピングを禁止している場合や、過度なアクセスでサーバーに負荷をかけないようにしましょう。ウェブサイトのrobots.txtファイルにスクレイピングに関する制限が記載されていることが多いです。
Requestsを使ったスクレイピングの基本については以下の記事で解説しています。
①【Requests】BeautifulSoupを使ったスクレイピングの基本を解説【サンプルコード】
このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピ…
サンプルコード全文
Seleniumを使ったスクレイピングのサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from selenium import webdriver from selenium.webdriver.chrome.options import Options # Chromeのオプションを設定 chrome_options = Options() chrome_options.add_argument("--headless") # ヘッドレスモードを有効にする # Chromeをヘッドレスモードで起動 driver = webdriver.Chrome(options=chrome_options) # ページを開く driver.get('https://scraping-for-beginner.herokuapp.com/ranking/') # ページタイトルを取得 title = driver.title print(f'ページタイトル: {title}') # WebDriverを閉じる driver.quit() |
コードの解説
ライブラリのインポート
1 2 |
from selenium import webdriver from selenium.webdriver.chrome.options import Options |
seleniumライブラリをインポートします。
Chromeのオプション設定
1 2 |
chrome_options = Options() chrome_options.add_argument("--headless") # ヘッドレスモードを有効にする |
Optionsを使ってヘッドレスモードを有効にします。これにより、ブラウザのウィンドウを表示せずにバックグラウンドで処理を行います。
この箇所を削除すると実際にブラウザが立ち上がるようになります。動作を確認したい場合、試してみてください。
ブラウザを起動
1 |
driver = webdriver.Chrome(options=chrome_options) |
webdriver.Chrome(options=chrome_options)でChromeを起動します。
ページを開く
1 |
driver.get('https://scraping-for-beginner.herokuapp.com/ranking/') |
driver.get(‘https://scraping-for-beginner.herokuapp.com/ranking/’)で指定したURLを開きます。
ページタイトルを取得
1 2 |
title = driver.title print(f'ページタイトル: {title}') |
driver.titleを使用してページのタイトルを取得し表示します。ここでは簡単にタイトルだけの取得ですが、必要な要素を指定できます。
WebDriverを閉じる
1 |
driver.quit() |
処理が終わったらdriver.quit()でブラウザを閉じます。
基本的には上記の方法で動的に生成されるコンテンツが取得できるようになります。またseleniumを使うことで検索ボックスに値を自動入力して結果を表示させる、ログインを実行するなどブラウザ自体を自動操作することが可能となります。
ただし上記の簡単なコードではデータが取得できないこともあります。例えばページをスクロールしないとデータが読み込まれないようなサイトの場合です。この場合、seleniumを使ってページの自動スクロールをしてあげれば取得できるようになります。
ウェブサイトでデータがどのように読み込まれているのかを確認し、それに合わせてseleniumでブラウザの操作を実施してみてください。
RequestsとSeleniumの違い
Requests:
requests.get(url)を使用して、指定されたURLからHTMLコンテンツをリクエストしています。
サーバーから受け取ったデータはすぐにHTMLとして返され、静的なページ(JavaScriptが実行されないページ)を処理するのに最適です。
Selenium:
driver.get(url)でブラウザ自体を自動操作し、URLにアクセスします。実際にブラウザを使ってページを読み込むのでページ内のJavaScriptが実行され、動的に生成されるコンテンツも含めた完全なページが取得できます。requestsでは対応できないJavaScript依存のページでも、Seleniumなら対応可能です。
JavaScriptが実行されない静的なページであればRequestsを使った方が動作が早く適しています。対してJavaScriptで生成された動的なコンテンツを取得する必要がある場合は、Seleniumを使うことになります。それだけではなくSeleniumではページのクリック、スクロール、フォーム入力といったユーザーの操作をエミュレートすることも可能です。
上記で紹介したサンプルコードでは静的なWebサイトのタイトルを取得するだけなのでRequestsが適していますが、ページの読み込みにJavaScriptを使用しているサイト、そしてログインが必要なウェブサイトなどにはSeleniumを利用しましょう。