【Python入門】14章の演習プログラム

 14章の演習プログラムでは、これまで学んできたスクレイピングの基礎知識を実際のコードに落とし込み、Webページの取得、情報抽出、そして定期実行といった処理を体験します。これにより、基礎を確実に身につけ、より実践的なPythonプログラミングへとステップアップできるでしょう。
 次の15章では、データベースとWebアプリケーションについて学んでいきます。ここでは、14章で学んだ各テーマを簡単にまとめ、サンプルプログラムを通じて振り返ります。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.Webページの取得方法

 Webスクレイピングの第一歩は、対象となるWebページのHTMLソースを取得することです。通常、requestsライブラリを使用してWebページの内容を取得します。

項目説明
Webページの取得方法requestsライブラリを使い、HTTPリクエストを送信してWebページを取得する。
主な関数requests.get(url) を利用して、指定URLのページ内容を取得する。

サンプルプログラム (requests)

import requests

url = "https://example.com"
response = requests.get(url)
print(response.text)  # 取得したHTMLソースを表示

実行結果

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>    
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

2.Webページから特定の情報を抽出する(BeautifulSoup)

 取得したHTMLから、必要な情報だけを抽出するために、BeautifulSoupライブラリを活用します。タグや属性を指定してデータを取り出すことが可能です。

項目説明
BeautifulSoupによる情報抽出HTMLパーシングを行い、タグやクラスなどで指定してデータを抽出する。
主な関数soup.find()soup.find_all() を利用して特定の要素を取得する。

サンプルプログラム (BeautifulSoup)

from bs4 import BeautifulSoup
import requests

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 例:すべてのリンクを抽出
links = soup.find_all("a")
for link in links:
    print(link.get("href"))

実行結果

https://www.iana.org/domains/example

3.スクレイピングを定期的に実行する(schedule)

 定期的にスクレイピング処理を実行することで、最新情報の取得や監視が可能になります。scheduleライブラリを用いれば、簡単に定期実行のジョブを設定できます。

項目説明
スクレイピングの定期実行scheduleライブラリを使い、指定した間隔でスクレイピング処理を自動実行する。
主な関数schedule.every().minutes.do(job) などでジョブを設定する。

サンプルプログラム (schedule)

import schedule
import time
import requests
from bs4 import BeautifulSoup

def job():
    url = "https://example.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    # 例:タイトルを抽出して表示
    title = soup.find("title").text
    print("ページタイトル:", title)

# 1分ごとにjob関数を実行
schedule.every(1).minutes.do(job)

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

実行結果

ページタイトル: Example Domain
ページタイトル: Example Domain
ページタイトル: Example Domain
ページタイトル: Example Domain

まとめ

 14章の演習プログラムでは、Webページの取得、BeautifulSoupを使った情報抽出、そしてscheduleライブラリによる定期実行といった、スクレイピングの全プロセスを実践的に学びます。実際に手を動かしながら演習に取り組むことで、基礎がより確実なものとなり、次の15章へとスムーズに進む準備が整うでしょう。さあ、14章の総まとめとして用意された演習プログラムに挑戦し、学びを実践に活かしていきましょう。