Pythonスクレイピングを始めよう!BeautifulSoupで情報収集を自動化

毎日同じWebサイトをチェックして情報を収集していませんか?

ニュースサイトの最新記事、競合他社の商品価格、求人情報の更新など、手作業でやっていると本当に時間がかかりますよね。

でも、Pythonを使えばこうした作業を全て自動化できるんです!

今回は、プログラミング初心者でも始められるPythonスクレイピングについて、
定番のBeautifulSoupライブラリを中心にサンプルコードも交えて解説していきます。

実際のコード例を交えながら、基礎から実践的な活用法まで丁寧にお伝えしますので、ぜひ最後までお付き合いください。

退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
created by Rinker
¥4,290 (2025/08/26 04:50:21時点 楽天市場調べ-詳細)
目次

スクレイピングで変わる日常業務

手作業からの解放

Web上の情報収集、本当に面倒ですよね。

私も以前は毎朝複数のニュースサイトをチェックして、気になる記事をExcelにまとめていました。

でも、これって完全に自動化できる作業なんです!

スクレイピングを覚えてからは:

  • 10分かかっていた情報収集が10秒に
  • 見落としがなくなった
  • データがきれいに整理される
  • 定期実行で常に最新情報をキャッチ

こんな変化を実感できました。

プログラミングで広がる可能性

「プログラミングって難しそう…」

そう思う気持ち、すごくよく分かります。

でも実は、Pythonのスクレイピングは思っているより簡単なんです。

例えば、こんなことができるようになります:

  • ECサイトの価格比較を自動化
  • 求人サイトから条件に合う案件を自動収集
  • 株価や為替の定期チェック
  • 競合他社のプレスリリース監視
  • 天気予報の自動取得

これらが数十行のコードで実現できるって、ワクワクしませんか?

Python スクレイピングの基礎知識

スクレイピングとは何か

スクレイピングとは、Webページから必要な情報を自動的に抽出する技術のことです。

人間がブラウザでWebページを見て情報を読み取るのと同じことを、プログラムに代行してもらうイメージですね。

具体的な流れ:

  1. 対象のWebページにアクセス
  2. HTMLソースコードを取得
  3. 必要な部分を抽出
  4. データを整理・保存

この一連の作業を自動化することで、大幅な時間短縮が可能になります。

必要なライブラリの紹介

Pythonでスクレイピングを行うには、以下のライブラリが必要です:

requests

  • Webページにアクセスするためのライブラリ
  • HTTP通信を簡単に行える

BeautifulSoup

  • HTMLを解析するためのライブラリ
  • タグや属性を指定して要素を抽出可能

pandas(オプション)

  • データを表形式で扱うライブラリ
  • CSV出力や集計処理に便利

この中でも特に重要なのがBeautifulSoupです。

HTMLの構造を理解して、欲しい情報をピンポイントで取得できるようになります。


ここで、より深くスクレイピングを学びたい方におすすめの書籍をご紹介します。

「退屈なことはPythonにやらせよう 第2版」は、プログラミング初心者でも理解しやすい内容で、スクレイピング以外の自動化テクニックも豊富に学べます。

退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
created by Rinker
¥4,290 (2025/08/26 04:50:21時点 楽天市場調べ-詳細)

BeautifulSoup を使った実践スクレイピング

環境構築とインストール

まずは必要なライブラリをインストールしましょう。

pip install requests beautifulsoup4 lxml

lxmlはBeautifulSoupのパーサーとして使用します。

処理速度が速く、精度も高いのでおすすめです。

最初のスクレイピングコード

シンプルな例から始めてみましょう。

import requests
from bs4 import BeautifulSoup

# Webページにアクセス
url = "https://example.com"
response = requests.get(url)

# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.content, 'lxml')

# タイトルを取得
title = soup.find('title').text
print(f"ページタイトル: {title}")

たった数行でWebページのタイトルが取得できました!

このコードの流れを詳しく見てみましょう:

  1. requests.get()でWebページのHTMLを取得
  2. BeautifulSoup()でHTMLを解析可能な形に変換
  3. find()メソッドで特定のタグを検索
  4. .textで要素内のテキストを抽出

HTML要素の取得方法

BeautifulSoupには様々な要素取得方法があります。

タグで検索

# 最初のh1タグを取得
h1_tag = soup.find('h1')

# 全てのpタグを取得
p_tags = soup.find_all('p')

クラス名で検索

# class="article-title"の要素を取得
article_title = soup.find('div', class_='article-title')

ID で検索

# id="main-content"の要素を取得
main_content = soup.find('div', id='main-content')

CSSセレクタで検索

# CSSセレクタを使用
titles = soup.select('.article-title')

これらの方法を組み合わせることで、欲しい情報を正確に抽出できます。

実用的なスクレイピング例

ニュースサイトの記事タイトル取得

実際にニュースサイトから記事タイトルを取得してみましょう。

import requests
from bs4 import BeautifulSoup
import time

def get_news_titles(url):
    try:
        response = requests.get(url)
        response.raise_for_status()  # エラーチェック

        soup = BeautifulSoup(response.content, 'lxml')

        # 記事タイトルを取得(サイトの構造に合わせて調整)
        titles = soup.find_all('h2', class_='article-title')

        news_list = []
        for title in titles:
            news_list.append(title.text.strip())

        return news_list

    except requests.RequestException as e:
        print(f"エラーが発生しました: {e}")
        return []

# 使用例
url = "https://news.yahoo.co.jp"
titles = get_news_titles(url)

for i, title in enumerate(titles, 1):
    print(f"{i}. {title}")

このコードのポイント:

  • try-exceptでエラーハンドリング
  • strip()で余分な空白を除去
  • サイトの構造に合わせたタグ・クラス名の指定

商品価格の定期チェック

ECサイトの商品価格を監視するスクリプトも作れます。

import requests
from bs4 import BeautifulSoup
import time
from datetime import datetime

def check_product_price(url, target_price):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }

        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.content, 'lxml')

        # 価格要素を取得(サイトに合わせて調整)
        price_element = soup.find('span', class_='price')

        if price_element:
            # 価格テキストから数値を抽出
            price_text = price_element.text
            price = int(price_text.replace(',', '').replace('円', ''))

            now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            print(f"{now} - 現在価格: {price:,}円")

            if price <= target_price:
                print(f"🎉 目標価格以下になりました! {price:,}円")
                return True

        return False

    except Exception as e:
        print(f"エラー: {e}")
        return False

# 使用例:10分間隔で価格チェック
target_price = 10000
product_url = "https://example-shop.com/product/123"

while True:
    if check_product_price(product_url, target_price):
        break
    time.sleep(600)  # 10分待機

このように、価格変動を自動監視することも可能です。


実際に動かしてみて、スクレイピングの威力を実感していただけたでしょうか?

「退屈なことはPythonにやらせよう 第2版」では、こうした実用的な例がたくさん紹介されています。メール送信の自動化、Excel操作、GUI自動化など、日常業務で役立つテクニックが満載です。

退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
created by Rinker
¥4,290 (2025/08/26 04:50:21時点 楽天市場調べ-詳細)

データ保存と活用テクニック

CSVファイルへの出力

取得したデータをCSVファイルに保存する方法を見てみましょう。

import csv
from datetime import datetime

def save_to_csv(data, filename):
    with open(filename, 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)

        # ヘッダー行を書き込み
        writer.writerow(['日時', 'タイトル', 'URL'])

        # データ行を書き込み
        for item in data:
            timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            writer.writerow([timestamp, item['title'], item['url']])

# 使用例
news_data = [
    {'title': 'サンプルニュース1', 'url': 'https://example.com/news1'},
    {'title': 'サンプルニュース2', 'url': 'https://example.com/news2'}
]

save_to_csv(news_data, 'news_data.csv')
print("データをCSVファイルに保存しました!")

pandasを使うとさらに便利です:

import pandas as pd

# データフレームを作成
df = pd.DataFrame(news_data)

# CSVに出力
df.to_csv('news_data.csv', index=False, encoding='utf-8')

# Excel形式で出力
df.to_excel('news_data.xlsx', index=False)

定期実行の自動化

スクリプトを定期実行する方法もご紹介します。

スケジュールライブラリを使用

import schedule
import time

def job():
    print("スクレイピング実行中...")
    # ここにスクレイピング処理を記述
    titles = get_news_titles("https://news.yahoo.co.jp")
    save_to_csv(titles, f"news_{datetime.now().strftime('%Y%m%d')}.csv")
    print("完了しました!")

# 毎日午前9時に実行
schedule.every().day.at("09:00").do(job)

# 1時間毎に実行
schedule.every().hour.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

Windowsタスクスケジューラ(Windows)

  1. タスクスケジューラを開く
  2. 「基本タスクの作成」を選択
  3. Pythonスクリプトのパスを指定
  4. 実行間隔を設定

cron(Linux/Mac)

# 毎日午前9時に実行
0 9 * * * /usr/bin/python3 /path/to/scraping_script.py

これで完全に自動化された情報収集システムの完成です!

スクレイピング学習のおすすめ書籍

「退屈なことはPythonにやらせよう」の魅力

今回紹介したスクレイピングテクニックは、実はほんの入り口に過ぎません。

「退屈なことはPythonにやらせよう 第2版」には、さらに実用的な自動化テクニックが詰まっています:

第2版での主な改良点:

  • Python 3.8対応
  • 最新ライブラリの活用法
  • より実践的な例の追加
  • セキュリティ面の強化

カバーされている内容:

  1. ファイル操作の自動化:フォルダ整理、ファイル名変更
  2. Webスクレイピング:今回紹介した内容をより詳しく
  3. Excel/Google Sheets操作:データ集計、レポート作成
  4. メール送信自動化:定期レポート、アラート通知
  5. GUI自動化:マウス・キーボード操作の自動化
  6. 画像処理:スクリーンショット、画像編集
  7. PDF操作:結合、分割、テキスト抽出

特に素晴らしいのは、プログラミング初心者を意識した説明です。

技術書にありがちな「当然知っているでしょ?」的な前提がなく、一つ一つ丁寧に解説されています。


本格的にPython自動化を学びたい方は、ぜひ手に取ってみてください。

退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
created by Rinker
¥4,290 (2025/08/26 04:50:21時点 楽天市場調べ-詳細)

他の学習リソース

書籍以外にも、学習を進める上で役立つリソースをご紹介します:

公式ドキュメント

注意点とマナー

スクレイピングを行う際は、以下の点にご注意ください:

  1. robots.txt の確認:サイトのルールを確認
  2. 適切な間隔をあける:サーバーに負荷をかけない
  3. 利用規約の遵守:サイトのルールを守る
  4. User-Agent の設定:適切なヘッダー情報を送信

これらのマナーを守って、健全なスクレイピングを心がけましょう。

まとめ

今回は、Pythonスクレイピングの基礎から実践的な活用法まで解説しました。

学んだこと:

  • スクレイピングの基本概念
  • BeautifulSoupを使った要素抽出
  • 実用的なコード例(ニュース取得、価格監視)
  • データ保存と自動化の方法

最初は難しく感じるかもしれませんが、実際にコードを動かしてみると「こんなに簡単なんだ!」と驚かれるはずです。

小さなスクリプトから始めて、徐々に複雑な処理にチャレンジしていけば、必ず業務効率化の強力な武器になります。

プログラミングで、毎日の「退屈な作業」を自動化してみませんか?

きっと新しい世界が開けるはずです!


Python自動化をもっと深く学びたい方は、「退屈なことはPythonにやらせよう 第2版」がおすすめです。今回紹介した内容をさらに詳しく、そして幅広いテーマで学ぶことができます。

退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
created by Rinker
¥4,290 (2025/08/26 04:50:21時点 楽天市場調べ-詳細)

プログラミングを通じて、より効率的で創造的な働き方を実現していきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次