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の特定行を取得する際の注意点、応用例についても説明しました。