インターネット上には、私たちの知りたい情報が数多く存在しています。
そんな情報を自動的に収集し、活用するために便利なのが「Webスクレイピング」です。
Pythonはシンプルで扱いやすい文法と、スクレイピングに最適なライブラリが豊富に揃っていることから、スクレイピング初心者に最もおすすめされる言語のひとつです。
この記事では、Pythonによるスクレイピングの基礎から実践的なコードまで、わかりやすく解説していきます。これからスクレイピングを学びたい方や、データ収集を自動化したい方にとって役立つ内容になっています。
Pythonでスクレイピングを行うには、いくつかのライブラリをインストールする必要があります。代表的なのが以下の3つです。
インストールは以下のコマンドで行います:
pip install requests beautifulsoup4 pandas
この準備が整えば、基本的なスクレイピングを始めることができます。
ここでは、ニュースサイトの見出しをスクレイピングする簡単な例を紹介します。たとえば「NHK NEWS WEB」のトップページから、ニュースの見出しを抽出する場合のコードです。
import requests
from bs4 import BeautifulSoup
# 対象のURL
url = 'https://www3.nhk.or.jp/news/'
# HTMLを取得
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 見出しの抽出(クラス名などはサイトに応じて確認)
headlines = soup.find_all('span', class_='title')
# 出力
for headline in headlines:
print(headline.get_text(strip=True))
このように、特定のHTMLタグやクラスを指定することで、欲しい情報を効率よく取り出すことができます。
スクレイピングを行う際には、法律やサイトの利用規約、マナーを守る必要があります。以下の点には特に注意してください。
対象のサイトにスクレイピングを許可しているかどうかを、https://対象サイト/robots.txt
で確認できます。
サーバーに負荷をかけないよう、1秒以上の待機時間を入れるのが基本です。
import time
# 各アクセスの間に待機時間を設定
time.sleep(1)
一部のサイトでは、スクレイピングが明示的に禁止されている場合があります。無断利用は法的リスクもあるため、事前に確認が必要です。
スクレイピング中によく出るエラーと、その対処方法を紹介します。
→ ユーザーエージェント(アクセス元の情報)が弾かれている可能性があります。ヘッダーに偽装情報を入れて対応します。
headers = {
'User-Agent': 'Mozilla/5.0'
}
response = requests.get(url, headers=headers)
→ URLのミスや、ページが削除されている可能性があります。URLを再確認しましょう。
→ 要素が見つからなかった場合に発生します。事前に if 要素:
で存在を確認しましょう。
スクレイピングで取得したデータを保存しておくことで、後から分析や再利用が可能になります。ここでは、pandasを使ってCSVファイルに保存する方法を紹介します。
import pandas as pd
# ダミーデータ
data = {
'見出し': ['ニュース1', 'ニュース2', 'ニュース3']
}
df = pd.DataFrame(data)
df.to_csv('news.csv', index=False, encoding='utf-8-sig')
これで「news.csv」というファイルが作成され、Excelなどで開いて中身を確認することができます。
通常のrequestsでは取得できないJavaScriptによって生成されるページもあります。その場合はSeleniumを使ってブラウザを自動操作する方法が効果的です。
pip install selenium
基本的なコード例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# ChromeDriverのパスを指定
service = Service(executable_path='chromedriver.exe')
driver = webdriver.Chrome(service=service)
# ページを開く
driver.get('https://example.com')
# 特定要素を取得
element = driver.find_element(By.CLASS_NAME, 'headline')
print(element.text)
driver.quit()
Pythonによるスクレイピングは、情報収集を効率化し、ビジネスや個人の学習にも活用できる非常に便利なスキルです。
本記事では、初心者向けに基本的なライブラリの使い方、実践コード、エラー対処法、そして応用としてのSelenium利用法まで紹介しました。
スクレイピングの世界は広く、サイト構造や目的によって多彩なアプローチが可能です。ぜひ自分の目的に合った方法を見つけ、さまざまなWebデータの活用にチャレンジしてみてください。