BeautifulSoupではfind()メソッドを用いて任意のid属性の要素を探索できます。ここではfind()メソッドを用いた要素探索について解説しています。
この記事の対象
id属性とは
id属性とは、HTMLの要素(タグ)の中で設定することができる属性(attribute)の一つで、要素をページ中で識別する識別子になります。
HTMLにおいて、idセレクタを指定する場合はid属性を使用し、クラスセレクタを指定する場合はclass属性を使用します。
項目 | 特徴 |
class属性 | HTML内で、同じclass名を何度も利用できる |
id属性 | HTML内で、一度しか利用できない |
似た言葉にDOM要素という言葉があります。DOMについてはこちらを参照して下さい。
それでは本題の探索する方法ですが、大きく2つあります。一つはfind()系、もう一つはselect()系になります。特徴としてfind()系は「要素名」「属性」を引数に指定できます。select()系は「CSSセレクタ」で探索します。
ここでは、find()系を中心に探索方法をまとめています。
find()メソッドを用いた要素探索
from bs4 import BeautifulSoup
#1---解析内容
analytics = """
<html><body>
<h1 id="title" >【Python応用】BeautifulSoupを用いた基本的なスクレイピング方法</h1>
<h2 id="sec_title">BeautifulSoupとは</h2>
<p id="article">スクレイピングをする上で任意の情報を抽出するライブラリが「BeautifulSoup」です。</p>
</html></body>
"""
#2---パーサー指定
soup = BeautifulSoup(analytics,'html.parser')
#3---id指定
h1 = soup.find(id = "title")
h2 = soup.find(id = "sec_title")
p = soup.find(id = "article")
#4--文字列抽出
print("h1 : ",h1.string)
print("h2 : ",h2.string)
print("p : ",p.string)
このプログラムでは、解析内容のHTMLを予め記述しておき、「soup.find(id = “要素”)」で抽出したい要素を指定しています。その下で抽出した要素を出力するプログラムとなっています。
結果
h1 : 【Python応用】BeautifulSoupを用いた基本的なスクレイピング方法
h2 : BeautifulSoupとは
p : スクレイピングをする上で任意の情報を抽出するライブラリが「BeautifulSoup」です。
下記で紹介しているのは、find()メソッドを用いない解析方法です。
find_all()メソッドを用いた要素探索
複数の要素を取得する方法は「find_all()メソッド」を用いることで可能です。
from bs4 import BeautifulSoup
#1---解析内容
analytics = """
<html><body>
<div id="menu">
<ul>
<li>Home</li>
<li>プログラミング</li>
<li>その他</li>
</ul>
</div>
</html></body>
"""
#2---パーサー指定
soup = BeautifulSoup(analytics,'html.parser')
#3---抽出
li_ana = soup.find_all("li")
for li in li_ana:
out_word = li.string
print(out_word)
「soup.find_all(“li”)」で全てのli要素を探索しています。for構文でli要素を出力しています。
結果
Home
プログラミング
その他
CSSセレクタでの抽出方法
CSSセレクタでの抽出方法としては「select」「select_one」があります。
項目 | 内容 |
soup.select | 1つの要素を取り出すメソッド |
soup.select_one | 複数の要素を取り出し、リスト型で返すメソッド |
詳しい使用方法は以下をご参照下さい。
>>>BeautifulSoupにおけるCSSセレクタの操作