BeautifulSoupでHTMLの特定行を取得する方法

Webスクレイピングやデータ収集には、HTMLの特定行を取得する必要があります。PythonのライブラリであるBeautifulSoupを使えば、HTMLの特定行を簡単に取得できます。本記事では、BeautifulSoupの基本的な使い方から、HTMLの行とは何か、そしてBeautifulSoupでHTMLの特定行を取得する方法について解説します。

BeautifulSoupの基本的な使い方

BeautifulSoupは、Pythonのライブラリであり、HTMLやXMLを解析するためのものです。BeautifulSoupを使うには、まずはライブラリをインストールする必要があります。以下のコマンドを実行してください。

pip install beautifulsoup4

次に、BeautifulSoupを使うための準備をします。以下のコードを実行して、BeautifulSoupをインポートし、HTMLを解析するためのオブジェクトを作成します。

from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<p>This is an example.</p>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')

上記のコードでは、HTMLを文字列として定義し、BeautifulSoupのコンストラクタに渡しています。’html.parser’はBeautifulSoupがHTMLを解析するために使用するパーサーを指定する引数です。

次に、BeautifulSoupオブジェクトからHTMLの特定行を取得する方法を説明します。

HTMLの行とは何か

HTMLの行とは、HTMLドキュメントの中の行のことです。HTMLの行は、<html>、<head>、<body>、<p>、<div>などのタグで区切られています。

以下のHTMLコードを例にとって、HTMLの行を説明します。

<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<<body>
<p>This is an example.</p>
</body>
</html>

このHTMLコードは、DOCTYPE宣言、htmlタグ、headタグ、bodyタグ、pタグで区切られた5つの行からなります。

BeautifulSoupでHTMLの特定行を取得する方法

BeautifulSoupでHTMLの特定行を取得するには、まずはBeautifulSoupオブジェクトを作成します。次に、findメソッドを使って、取得したい行のタグを指定します。以下のコードを実行して、HTMLの特定行を取得してみましょう。

from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<p>This is an example.</p>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
title_tag = soup.find('title')
print(title_tag)

上記のコードでは、findメソッドに’title’という文字列を渡して、HTMLのtitleタグを取得しています。titleタグが含まれている行が取得され、結果が表示されます。

BeautifulSoupでHTMLの特定行を取得する例

以下のHTMLコードを例にとって、BeautifulSoupでHTMLの特定行を取得する方法を説明します。

<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>This is an example website.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</body>
</html>

上記のHTMLコードから、h1タグの行を取得する場合、以下のコードを実行します。

from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>This is an example website.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
h1_tag = soup.find('h1')
print(h1_tag)

上記のコードでは、findメソッドに’h1’という文字列を渡して、HTMLのh1タグを取得しています。h1タグが含まれている行が取得され、結果が表示されます。

BeautifulSoupでHTMLの特定行を取得する際の注意点

BeautifulSoupでHTMLの特定行を取得する際には、以下の点に注意してください。

  • findメソッドに渡す文字列は、HTMLのタグ名を指定する必要があります。
  • findメソッドは、最初にマッチしたタグを返します。複数のタグを取得する場合は、find_allメソッドを使ってください。
  • HTMLの行は、改行コードで区切られています。行を取得する場合は、改行コードを含めた文字列を指定してください。

BeautifulSoupでHTMLの特定行を取得する応用例

以下のHTMLコードを例にとって、BeautifulSoupでHTMLの特定行を取得する応用例を説明します。

<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>John</td>
<td>25</td>
</tr>
<tr>
<td>Mary</td>
<td>30</td>
</tr>
</table>
</body>
</html>

上記のHTMLコードから、表の2行目にあるJohnの年齢を取得する場合、以下のコードを実行します。

from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>John</td>
<td>25</td>
</tr>
<tr>
<td>Mary</td>
<td>30</td>
</tr>
</table>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
table_tag = soup.find('table')
rows = table_tag.find_all('tr')
john_age = rows[1].find_all('td')[1].get_text()
print(john_age)

上記のコードでは、find_allメソッドを使って、表の各行を取得し、2行目の2列目にあるJohnの年齢を取得しています。get_textメソッドは、タグの中身を取得するためのメソッドです。

まとめ

本記事では、BeautifulSoupを使ってHTMLの特定行を取得する方法について解説しました。BeautifulSoupを使うことで、HTMLから必要な行を簡単に取得できます。また、HTMLの行とは何か、BeautifulSoupでHTMLの特定行を取得する際の注意点、応用例についても説明しました。