現在の見出し: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()関数関数は一定の処理をまとめたプログラムの塊です。でリストの要素数を取得し、どれだけの要素が見つかったかを明確にします。 |