ログアウト中 ログイン

【Python】BeautifulSoup版スクレイピングツール開発講座 第2章2.2節「保存データ拡張機能の作成」




現在の見出し:2.2節:保存データ拡張機能の作成

見出し一覧

  • 2.2節:保存データ拡張機能の作成
  • - find_all()メソッドによる複数要素抽出機能の追加
  • - for文による繰り返し処理機能の実装

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

find_all()メソッドによる複数要素抽出機能の追加

前節(第2章 2.1節)で作成したコードを基盤として、find_all()メソッドによる複数の同一タグ要素の一括抽出機能を追加します。前節のfind()メソッドは、最初に見つかった1つの要素のみを取得しますが、実際のWebページには同じタグが複数存在するため、すべての要素を取得する機能が必要です。

find_all()メソッドとfind()メソッドの主要な違いについて、以下に簡単にまとめました。

メソッド名 取得対象 戻り値の型 使用例
find() 最初の1つの要素 Tagオブジェクトオブジェクトはプログラムの要素の一つで、データとその操作手段を一つにまとめたものです。 soup.find('title')
find_all() すべての該当要素 リスト soup.find_all('h2')

find()メソッドは単一要素を取得してTagオブジェクトを返しますが、find_all()メソッドは複数要素を取得してリスト形式で返します。この違いにより、find_all()の結果は、forfor文はプログラミングの繰り返し制御構文で、指定回数や条件に基づき特定コードを反復実行でき、コードの簡潔さと可読性を向上させます。文で繰り返し処理できるようになります。

「https://example.com」にはh2タグが存在しないので、以下コードを実行してもh2タグは0個と返ってきます。h2タグが存在するドメインに変更して、実際に取得できるかどうか試してみてください。

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

# 固定URLでHTMLデータを取得
url = "https://example.com"
response = requests.get(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)}個")

# CSV書き込み機能
filename = "scraped_data.csv"
file = open(filename, 'w', newline='', encoding='utf-8')
writer = csv.writer(file)
print("CSVファイル作成完了")
print(f"ファイル名: {filename}")

# データ行追加機能
writer.writerow(['タイトル', 'URL'])
writer.writerow([title_text, url])
file.close()
print("データ書き込み完了")
# 実行結果
HTMLデータ取得完了
データサイズ: 1256文字
HTML解析完了
解析結果タイプ: <class 'bs4.BeautifulSoup'>
タイトルタグ抽出完了
抽出要素: <title>Example Domain</title>
文字データ取得完了
タイトル: Example Domain
h2タグ抽出完了: 0個
CSVファイル作成完了
ファイル名: scraped_data.csv
データ書き込み完了
行数 種別 コード 解説
32行目 新規 h2_elements = soup.find_all('h2') find_all()メソッドを使用してHTMLドキュメント内のすべてのh2タグを検索・抽出します。戻り値は見つかった要素をすべて含むリストです。
33行目 新規 print(f"h2タグ抽出完了: {len(h2_elements)}個") 抽出されたh2要素の個数を表示して処理結果を確認します。len()関数関数は一定の処理をまとめたプログラムの塊です。でリストの要素数を取得し、どれだけの要素が見つかったかを明確にします。
for文による繰り返し処理機能の実装

第2章2.2節「for文による繰り返し処理機能の実装」の続きを見る


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

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