Pythonは、さまざまなタスクを自動化するための強力なツールです。ウェブスクレイピングは、その中でも特に有用な機能の一つです。ウェブスクレイピングを使用すると、ウェブサイトから必要なデータを自動的に収集できます。この記事では、Pythonを使ってウェブスクレイピングを行い、データ収集を自動化する方法について具体例を交えて解説いたします。
moun45.hatenablog.com
必要なライブラリのインストール
Pythonでウェブスクレイピングを行うためには、いくつかのライブラリを使用します。主に使用するライブラリは、requestsとBeautifulSoupです。requestsはウェブページへのリクエストを送信し、BeautifulSoupはウェブページのHTMLを解析するために使用します。これらのライブラリをインストールしましょう。
pip install requests
pip install beautifulsoup4
ウェブページへのリクエストとHTMLの取得
まず、ウェブページにリクエストを送信し、そのHTMLを取得します。今回は、例としてニュースサイトのトップページから記事のタイトルを取得するスクリプトを作成します。
import requests
from bs4 import BeautifulSoup
response = requests.get(url)
if response.status_code == 200:
page_content = response.content
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
HTMLの解析とデータの抽出
次に、取得したHTMLを解析し、必要なデータを抽出します。ここでは、記事のタイトルを取得するために、HTMLの構造を解析します。
soup = BeautifulSoup(page_content, "html.parser")
titles = soup.find_all("h2", class_="article-title")
for title in titles:
print(title.get_text())
このスクリプトでは、<h2>タグで囲まれた記事のタイトルを抽出しています。class_="article-title"は、タイトルの特定のクラスを指定しています。
データの保存
取得したデータをファイルに保存することで、後で再利用できるようにします。ここでは、CSVファイルに保存する例を示します。
with open("article_titles.csv", "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Title"])
for title in titles:
writer.writerow([title.get_text()])
データ収集を定期的に行いたい場合は、Pythonのscheduleライブラリを使用することをお勧めします。これにより、指定した時間に自動的にスクレイピングを実行できます。
まず、scheduleライブラリをインストールします。
次に、スケジュールを設定し、スクレイピング関数を定期的に実行するようにします。
import schedule
import time
def scrape_and_save():
response = requests.get(url)
if response.status_code == 200:
page_content = response.content
soup = BeautifulSoup(page_content, "html.parser")
titles = soup.find_all("h2", class_="article-title")
with open("article_titles.csv", "a", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
for title in titles:
writer.writerow([title.get_text()])
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
schedule.every().day.at("09:00").do(scrape_and_save)
while True:
schedule.run_pending()
time.sleep(1)
まとめ
Pythonを使ったウェブスクレイピングは、ウェブサイトからデータを自動的に収集するための強力な手法です。requestsとBeautifulSoupを使用してウェブページのHTMLを取得・解析し、必要なデータを抽出できます。また、scheduleライブラリを使用することで、定期的なデータ収集を自動化することも可能です。これらの技術を活用して、効率的なデータ収集を実現しましょう。