Beautiful Soup の基本的な使用法#
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
ノードセレクタ#
ノードの名前を直接呼び出し、その後に string を呼び出すと、ノード内のテキストを取得できます。
soup.a.string --->最初のaタグのテキストを取得し、テキストの文字列を返します
soup.a --->最初のaタグのHTMLコード(Tag型)を取得できます。ネストした選択も可能です。
soup.a.attrs['class']
soup.a['class'] --->属性を取得します。属性が一意の場合は文字列を返し、属性が一意でない場合はリストを返します。
関連選択#
- 子ノード
soup.a.contents --->リストを返します
soup.a.children --->ジェネレータを返します
- 子孫ノード
soup.a.descendands --->ジェネレータを返します
- 親ノード
soup.a.parent --->最初のaノードの親ノードを返します
- 祖先ノード
soup.a.parents --->ジェネレータを返します
- 兄弟ノード
soup.a.next_sibling --->次の兄弟ノードを返します
soup.a.previous_sibling --->前の兄弟ノードを返します
soup.a.next_siblings --->後ろの兄弟ノードを返します。ジェネレータの型です。
soup.a.previous_siblings --->前の兄弟ノードを返します。ジェネレータの型です。
上記のメソッドは単一のノードを返します。その後、string、attrs などの属性を直接呼び出してテキストや属性の内容を取得できます。複数のノードのジェネレータが返される場合は、リストに変換して特定の要素を取り出し、その後に string、attrs などの属性を呼び出すことができます。
メソッドセレクタ#
find_all(name, attrs, recusive, text, **kwargs)
: 条件に一致するすべての要素を検索します。
name
:ノード名に基づいて検索し、リスト(Tag 型)を返します。-
attrs
:属性に基づいて検索し、リスト(Tag 型)を返します。
soup.find_all(attrs={'id':'list-1'})
soup.find_all(id='list-1')
soup.find_all(class_='element') --->classはPythonのキーワードですので、後ろに'_'を追加する必要があります。
text
:このパラメータは、ノードのテキストと一致させるために使用できます。文字列または正規表現オブジェクトの形式で渡すことができます。
soup.find_all(text=re.compile('link')) -->正規表現に一致するすべてのノードのテキストで構成されるリストを返します。
find(name, attrs, recusive, text, **kwargs)
:条件に一致する最初の要素を検索します。find_all()
と同様の使用方法で、単一の Tag 型を返します。
CSS セレクタ#
select()
メソッドを呼び出し、対応する CSS セレクタを渡すだけで使用できます:soup.select('CSSセレクタステートメント')
リストを返し、要素は Tag 型です。
1.ネストした選択をサポート
for ul in soup.select('ul'):
print(ul.select('li'))
2.属性の取得
for ul in soup.select('ul'):
content = ul['id']
content = ul.attrs['id']
3.テキストの取得
for ul in soup.select('ul'):
content = ul.string --->直接のテキストを取得します
content = ul.get_text() --->ノード内のすべてのテキストを取得します