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() --->ノード内のすべてのテキストを取得