ログアウト中 ログイン

【Python】BeautifulSoup版スクレイピングツール開発講座 第3章3.2節「選択機能の作成」




現在の見出し:3.2節:選択機能の作成

見出し一覧

  • 3.2節:選択機能の作成
  • - if-elif-else文による処理分岐機能の実装
  • - break文による処理終了機能の追加

【PR】『Python』を学べる企業・個人向けのプログラミングコース

if-elif-else文による処理分岐機能の実装

前節(第3章 3.1節)で作成したコードを基盤として、if-elif-else文による処理選択機能を追加します。現在の無限ループ無限ループはプログラムが終了条件を満たさずに永続的に繰り返される状態で、意図的に作成される場合とプログラミングエラーの場合があります。では、プログラムプログラムはコンピュータに対して何をすべきかを指示する一連の命令です。を終了する手段が提供されていないため、ユーザーが処理を制御できる選択肢を実装する必要があります。

if-elif-else文を使用することによって、ユーザーの入力に応じて異なる処理の実行が可能です。この条件分岐条件分岐はプログラム内で指定した条件によって処理の分岐を行う制御構造です。により、継続・一時停止・終了の3つの選択肢を提供し、ユーザーがプログラムの動作を柔軟に制御できるようになります。各分岐では適切なメッセージを表示して、ユーザーに現在の状態を明確に伝えます。

選択肢 入力値 動作 用途
継続 'y' 次のURL入力に進む 複数のWebページを連続処理する場合
一時停止 'n' 現在の処理を継続 同じ処理を再度実行する場合
終了 'q' プログラムを終了する 作業完了時や異常時の終了

また、lower()メソッドメソッドは特定の処理をまとめたプログラムの塊です。を使用することで、ユーザー入力の大文字小文字を統一して判定できます。この処理により、'Y'、'y'、'Yes'などの様々な入力形式に対応し、ユーザビリティを向上させます。

# コード
import requests
from bs4 import BeautifulSoup
import csv

# 継続実行機能
while True:
    # URL取得機能
    user_url = input("スクレイピングするURLを入力してください: ")
    print(f"入力されたURL: {user_url}")

    # HTMLデータを取得
    response = requests.get(user_url)
    print("HTMLデータ取得完了")
    print(f"データサイズ: {len(response.text)}文字")

    # HTML解析機能
    soup = BeautifulSoup(response.text, 'html.parser')
    print("HTML解析完了")
    print(f"解析結果タイプ: {type(soup)}")

    # 特定タグ抽出機能
    title_element = soup.find('title')
    print("タイトルタグ抽出完了")
    print(f"抽出要素: {title_element}")

    # 文字データ取得機能
    if title_element:
        title_text = title_element.text
        print("文字データ取得完了")
        print(f"タイトル: {title_text}")
    else:
        print("タイトルタグが見つかりません")
        title_text = "タイトル不明"

    # 複数要素抽出機能
    h2_elements = soup.find_all('h2')
    print(f"h2タグ抽出完了: {len(h2_elements)}個")

    # 繰り返し処理機能
    file = open("scraped_data.csv", 'a', newline='', encoding='utf-8')
    writer = csv.writer(file)
    
    for element in h2_elements:
        h2_text = element.text.strip()
        writer.writerow([h2_text, user_url])
        
    file.close()
    print("複数データ保存完了")
    
    # 処理分岐機能を追加
    choice = input("続けますか? (y/n/q): ")
    
    if choice.lower() == 'y':
        print("次のURLを入力してください")
    elif choice.lower() == 'n':
        print("一時停止します")
    else:
        print("プログラムを終了します")
# 実行結果
入力されたURL: https://trends.codecamp.jp/
HTMLデータ取得完了
データサイズ: 358677文字
HTML解析完了
解析結果タイプ: <class 'bs4.BeautifulSoup'>
タイトルタグ抽出完了
抽出要素: <title>

        IT・プログラミング情報のコネクトメディア「trends.」(トレンズ)

</title>
文字データ取得完了
タイトル:

        IT・プログラミング情報のコネクトメディア「trends.」(トレンズ)


h2タグ抽出完了: 19個
複数データ保存完了
続けますか? (y/n/q): y
次のURLを入力してください
スクレイピングするURLを入力してください: https://codecamp.jp/
入力されたURL: https://codecamp.jp/
HTMLデータ取得完了
データサイズ: 62329文字
HTML解析完了
解析結果タイプ: <class 'bs4.BeautifulSoup'>
タイトルタグ抽出完了
抽出要素: <title>DX人材育成ならCodeCamp(コードキャンプ)</title>
文字データ取得完了
タイトル: DX人材育成ならCodeCamp(コードキャンプ)
h2タグ抽出完了: 6個
複数データ保存完了
続けますか? (y/n/q): q
プログラムを終了します
スクレイピングするURLを入力してください:
行数 種別 コード 解説
52行目 新規 choice = input("続けますか? (y/n/q): ") ユーザーから継続意思を確認する入力を受け取ります。選択肢を明示することで、ユーザーが適切な選択を行えるようにします。
54行目 新規 if choice.lower() == 'y': ユーザーの入力が'y'(継続)の場合の条件分岐を開始します。lower()メソッドで大文字小文字を統一して判定します。
55行目 新規 print("次のURLを入力してください") 継続選択時のメッセージを表示してユーザーに次の動作を明確に伝えます。ループループは一連の命令を繰り返し実行する構造です。が継続されて再度URL入力待ちになります。
56行目 新規 elif choice.lower() == 'n': ユーザーの入力が'n'(一時停止)の場合の条件分岐です。継続以外の選択肢を提供してユーザーの選択幅を広げます。
57行目 新規 print("一時停止します") 一時停止選択時のメッセージを表示します。現在の実装ではループが継続されますが、ユーザーに状態を明確に伝えます。
58行目 新規 else: 'y'と'n'以外のすべての入力に対応するデフォルト分岐です。'q'や他の文字が入力された場合の処理を行います。
59行目 新規 print("プログラムを終了します") 終了選択時のメッセージを表示します。ユーザーにプログラムが終了することを明確に伝える重要な確認出力です。
break文による処理終了機能の追加

第3章3.2節「break文による処理終了機能の追加」の続きを見る


すべてのカリキュラムを無料登録で学ぶ

プログラミング・マーケティング・AI活用方法を
今すぐ無料登録すると、全てのコンテンツが視聴可能になります。