Seleniumガイドを使用したウェブスクレイピング

10分以内にターゲットサイトからウェブデータの収集を開始してCSVファイルに結果を保存するために必要となる唯一の手順ガイドです。
How to use Selenium for web scraping
louisr
Louis Ruggeri | Support Manager
26-May-2022

この記事では、以下の事項を説明します。

この記事に該当するGitHubレポジトリはこちらにあります。

Selenium: これは何でしょうか、どのように使用するのでしょうか

Seleniumは、ブラウザの自動化行動を可能にするさまざまなツールやライブラリを含むオープンソースのソフトウェアです。これには次のようなものがあります。

  • ウェブページごとの要素アクション/取得 (close、back、get_cookie、get_screenshot_as_png、get_window_sizeなど)
  • サイトテスト
  • アラートプロンプトやクッキーの管理(追加/削除)
  • 要素の送信実行
  • データの収集/ウェブスクレイピング

Firefox、Chrome、Safari、Internet Browserなど、ほとんどのブラウザと互換性があります。また、Python、Node.js、C#、JavaScript、PHPなど、多様なプログラミング言語でのテストの書き込みに使用できます。 お使いいただけるように、official Selenium 4.1.5 documentation libraryのリンクをご用意しました。

Puppeteer vs Selenium

Puppeteer vs Seleniumについて議論し、考慮されている皆様 – JavaScriptとChromeを主に中心とする場合には、Puppeteerのほうが利便性が高いと思います。その一方で、複数のブラウザ間でブラウザアプロケーションのテストやウェブデータの収集を実施する場合には、Seleniumが最良の選択でしょう。

Seleniumを活用してスクレイピングを行う手順ガイド  

手順:Seleniumをインストール 

お使いのコンピューターにpip(Pythonのインストールパッケージ<など)がある場合には、これを開いて次を入力するだけです。

pip install -U selenium

これがない場合には、PyPIをダウンロードして解凍し、次を実行します。

python setup.py install

Seleniumがお使いのブラウザとやり取りするには、ドライバが必要となるのでご注意ください。こちらは主なブラウザ用ドライバのリンクです。是非ご利用ください。

Firefoxをブラウザの例として使ってみましょう。これを実行するにはまずFirefoxを開き、Yahooなどのウェブページにアクセスし、「seleniumhq」を検索してから、ブラウザを閉じます。こちらがコードに表示されるものです:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title

elem = browser.find_element(By.NAME, 'p')  # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)

browser.quit()

手順:サポート用パッケージをインポート

Seleniumは個別に使用されるわけではなく、たとえばPanda(オープンソースデータ分析ツールを使用するためのツール)などの他のプログラムと協力して機能します。これを実行するには、次を入力します:

from selenium import webdriver
import time
import pandas as pd 

手順3:変数の定義 

この手順では、ターゲットフォルダ、検索クエリ、ターゲットサイトを定義します。この例では、LinkedInに公開されている競合他社のさまざまな採用情報をマッピングすることを目的としています。入力は次のようになります。

FILE_PATH_FOLDER = 'F:....Competitive_Analysis'
search_query = 'https://www.linkedin.com/q-chief-financial-officer-jobs.html'
driver = webdriver.Chrome(executable_path='C:/.../chromedriver_win32/chromedriver.exe')
job_details = []

手順4:HTMLタグ検査

HTMLサイトには通常、指定するターゲットサイトに表示される情報に関連付けられるそれぞれのタグに独特の識別子があります。この技術では、ターゲットサイトをすぐにクローリングするためにこのHTMLサイトを適切に活用します。これを実行するには:

  • ページ上の任意の場所を右クリックし、「検査」を押します
  • 続いて、左上に表示される矢印をクリックするか、またはCtrl+Shift+Cキーを押して特定の要素を検査し、希望するHTMLタグを取得します

このように表示されます:

driver.get(search_query)
time.sleep(5)
job_list = driver.find_elements_by_xpath("//div[@data-tn-component='organicJob']")

手順:特定のデータポイント抽出

Seleniumウェブドライバの「find_elements_by_xpath」属性を使用してターゲットとするデータポイントを抽出し、ターゲットデータが収集されてからブラウザを閉じます。

次のようなデータポイントをターゲットにします。

  • 職種
  • 会社概要
  • 勤務地
  • 職務内容
  • 求人日時が更新されました

このように表示されます:

for each_job in job_list:
    # Getting job info
    job_title = each_job.find_elements_by_xpath(".//h2[@class='title']/a")[0]
    job_company = each_job.find_elements_by_xpath(".//span[@class='company']")[0]
    job_location = each_job.find_elements_by_xpath(".//span[@class='location accessible-contrast-color-location']")[0]
    job_summary = each_job.find_elements_by_xpath(".//div[@class='summary']")[0]
    job_publish_date = each_job.find_elements_by_xpath(".//span[@class='date ']")[0]
    # Saving job info 
    job_info = [job_title.text, job_company.text, job_location.text, job_summary.text, job_publish_date.text]
 # Saving into job_details
    job_details.append(job_info)
driver.quit()

上記のセレクターはターゲットに応じて変更されることがあるため、問題のセレクターが正しいことを必ず確認し、事前に正しいと仮定しないでください。

手順6:出力の準備にデータを保存

この時点では次に示すように、データフレームに列を追加し、「to_csv」属性を使用して取得したすべてのデータをCSV形式で保存します。

job_details_df = pd.DataFrame(job_details)
job_details_df.columns = ['title', 'company', 'location', 'summary', 'publish_date']
job_details_df.to_csv('job_details.csv', index=False)

必要なCSVファイルは次の場所からダウンロードできます。 FILE_PATH_FOLDER

これで、Seleniumを活用した最初のウェブスクレイピングジョブを正しく完了しました。

Seleniumとプロキシを統合する 

Seleniumにプロキシを統合することで、次のようなことができます。

  • 多様なジオロケーションでデータ収集を実行する
  • ブロックされるリスクなしでデータを大規模に収集できるようになります(「過剰な数」の同時/連続リクエストを送信するIPのレート制限など)。この場合、専用のウェブアンブロックサービスも併せてご覧ください。
  • 実際のユーザーIPの視点からデータを収集することができるため、警戒心の強いターゲットサイトからミスリードされた情報を提供されることはありません

 Seleniumとプロキシの統合は、次の手順で達成できます。

  1. Bright Dataのダッシュボードにアクセスし、「ゾーンを作成」をクリックします。
  2. 「ネットワークタイプ」を選択し、「保存」をクリックします。
  3. 次に、Seleniumにアクセスし、「setProxy」機能の「プロキシIP:ポート」に入力します。たとえば、HTTPとHTTPSの両方でzproxy.lum-superproxy.io:22225。
  4. 「sendKeys」入力ではユーザーのBright DataアカウントIDを入力し、プロキシゾーン名(lum-customer-CUSTOMER-zone-YOURZONE)を入力します。ゾーンのパスワードはゾーン設定で見つかります。
louisr
Louis Ruggeri | Support Manager

Lou is a Support Manager at Bright Data with a voracious appetite for knowledge, especially when it comes to data. In his spare time, he enjoys a good book, the occasional taco, and blogging about data collection.

あなたは下記にもご興味がおありかもしれません

solve_and_prevent_recaptcha

WebスクレイピングとCAPTCHA

ネットサーフィンをしていると、CAPTCHAと呼ばれるセキュリティ認証に遭遇することがあるでしょう。それは、アクセスしているのがロボットやボットではなく人間であることを確認するチェックで、「橋の写真を選んでください」のような要求がされ、ランダムに表示される画像の中から橋の写真だけをクリックする方式が一般的ではないでしょうか。
What is a proxy server & how does it work?

プロキシサーバーとは、その仕組みは?

このガイドでは、プロキシサーバーの「機能」、「現在利用できるプロキシの種類」、「プロキシとVPNの比較」など、貴社が適切なツールを選択できるよう、プロキシサーバーに関するあらゆる情報を網羅しています。
What is a reverse proxy

リバースプロキシとは

リバースプロキシは、より効率的な暗号化ツールとして機能し、負荷分散の実現に役立つだけでなく、コンテンツをローカルにキャッシュし、データ消費者に迅速に配信できます。本記事はリバースプロキシーについての究極ガイドです。
Puppeteer vs Selenium: Main Differences

Puppeteer 対 Selenium:主な違い

本究極のガイドでは、両ライブラリの起源、主要な特徴および機能、最も重要な事項を網羅しています。貴社の事業に最適な選択肢の選び方