BeautifulSoup|Tag|select|Find Label
7792 ワード
BeautifulSoupは、HTML検索ラベルを強力に復号する機能を提供します.
参照元:Beautiful Soup 4.4.0ドキュメント
文書ディレクトリ 1、find_allとfind 2、その他の検索方法 3、CSSセレクタ 3.1詳細 3.2子孫ノードの検索 4、Tagオブジェクト 1、find_allとfind
一番よく使われるのはfind_all関数、詳細は次のとおりです:find_all(self,name=None,attrs={},recursive=True,text=None,limit=None,kwargs)解釈:self:クラスメソッドのフラグ;name:検索するtagの名前で、デフォルトはNoneです.attrs:ラベルプロパティ、辞書、デフォルトは空recursive:検索が要素ノードのサブツリーの下で全範囲行われるかどうかを指定し、デフォルトはTrueです.Falseは、現在のノードの直接サブノードのみを検索することを示します.text:textパラメータでドキュメント内の文字列の内容を検索できます.nameパラメータのオプション値と同様にtextパラメータは文字列、正規表現、リスト、Trueを受け入れる.Limit:戻り結果の数を制限し、制限に達したら検索を停止します.**kwargs名前を指定するパラメータは、内蔵のパラメータ名を検索するのではなく、検索時に指定した名前tagの属性として検索されます.
*kwargsとattrsの違いを説明します.肝心なのは、属性が検索するラベルの特有の属性であるかどうかです.もしそうであれば、attrsを使って、そうでなければkwargsを使います.
検索されたすべての指定された要素のリストを返します.各要素は
もう一つの小さな知識があります.
なぜならfind_allはSPで最もよく使われる方法であるため、SPライブラリは簡略化方法を定義した.BeautifulSoupオブジェクトとtagオブジェクトをメソッドとして使用できます.このメソッドの実行結果と、このオブジェクトを呼び出すfind_all()メソッドは同じで、次の2行のコードは等価です.
find関数とfind_allは完全に一致するパラメータであり、find関数は検索条件を満たす最初のノードのみを返し、以下に等価である.
find結果が見つからない場合はNoneに戻ります.
find_all()とfind()は、現在のノードのすべてのサブノード、孫ノードのみを検索する.
2、その他の検索方法
SPのすべての検索方法はfind_と全く同じですallのパラメータ.
find_parents():現在のノードの親世代ノードを検索し、条件を満たすすべての結果からなるリストを返します.find_parent():現在のノードの親世代ノードを検索し、最初の条件を満たす結果find_を返します.next_Siblings():条件に合致するすべての兄弟ノードを返し、リストfind_を構成します.next_Sibling():条件に合致する後の最初のtagノードのみを返す.find_previous_Siblings():条件を満たすすべての前の兄弟ノードを返し、リストfind_を構成します.previous_Sibling():最初の条件に合致する前の兄弟ノードを返す—————————————————————————————————————————————find_all_next():条件を満たすすべてのノードを返し、リスト結果find_next():条件を満たす最初のノードを返します.
特筆すべきは、この方法とfind_allの違いはfind_allは現在のノードの下にあるノードのみを遍歴し、find_next_allはドキュメント全体を巡ります.
———————————————————————————————————————————— find_all_previous():条件を満たすすべてのノード、リストを返します.find_previous():条件を満たす最初のノードを返します.
一例として、1つのtagオブジェクトaについて、
3、CSSセレクタ
3.1詳細
tag.select(css)tagは
たとえば、次のようになります.
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
セレクタ
説明
[attName]
指定した属性を持つ要素を選択
[attName=value]
指定した属性と属性値を持つ要素を選択
[attName^=value]
属性値を一致させ、値の先頭にある要素を指定します.
[attName$=value]
属性値を一致させ、値の末尾にある要素を指定します.
[attName*=value]
属性値に指定した値を含む要素の一致
たとえば、次のようになります.
3.2子孫ノードの検索
select(css)のcssに複数のノードがある場合、ノード要素間をスペースで区切ることは、soupなどの子孫ノードを検索することである.select(「div p」)は、
ノード要素間を「>」で区切る(注意>の前後に少なくとも1つのスペースが含まれている)ことは、直接サブノード、例えばsoupを検索することである.select(「div>p」)は、孫ノードを含まない
参照元:Beautiful Soup 4.4.0ドキュメント
文書ディレクトリ
一番よく使われるのはfind_all関数、詳細は次のとおりです:find_all(self,name=None,attrs={},recursive=True,text=None,limit=None,kwargs)解釈:self:クラスメソッドのフラグ;name:検索するtagの名前で、デフォルトはNoneです.attrs:ラベルプロパティ、辞書、デフォルトは空recursive:検索が要素ノードのサブツリーの下で全範囲行われるかどうかを指定し、デフォルトはTrueです.Falseは、現在のノードの直接サブノードのみを検索することを示します.text:textパラメータでドキュメント内の文字列の内容を検索できます.nameパラメータのオプション値と同様にtextパラメータは文字列、正規表現、リスト、Trueを受け入れる.Limit:戻り結果の数を制限し、制限に達したら検索を停止します.**kwargs名前を指定するパラメータは、内蔵のパラメータ名を検索するのではなく、検索時に指定した名前tagの属性として検索されます.
*kwargsとattrsの違いを説明します.肝心なのは、属性が検索するラベルの特有の属性であるかどうかです.もしそうであれば、attrsを使って、そうでなければkwargsを使います.
検索されたすべての指定された要素のリストを返します.各要素は
bs4.element.Tag
オブジェクトです.結果がなければ空のリストに戻ります.————————————————————————————————————————もう一つの小さな知識があります.
なぜならfind_allはSPで最もよく使われる方法であるため、SPライブラリは簡略化方法を定義した.BeautifulSoupオブジェクトとtagオブジェクトをメソッドとして使用できます.このメソッドの実行結果と、このオブジェクトを呼び出すfind_all()メソッドは同じで、次の2行のコードは等価です.
soup.find_all("a")
soup("a")
find関数とfind_allは完全に一致するパラメータであり、find関数は検索条件を満たす最初のノードのみを返し、以下に等価である.
soup.find_all('head',limit=1)
soup('head',limit=1)
soup.find('head')
find結果が見つからない場合はNoneに戻ります.
find_all()とfind()は、現在のノードのすべてのサブノード、孫ノードのみを検索する.
2、その他の検索方法
SPのすべての検索方法はfind_と全く同じですallのパラメータ.
find_parents():現在のノードの親世代ノードを検索し、条件を満たすすべての結果からなるリストを返します.find_parent():現在のノードの親世代ノードを検索し、最初の条件を満たす結果find_を返します.next_Siblings():条件に合致するすべての兄弟ノードを返し、リストfind_を構成します.next_Sibling():条件に合致する後の最初のtagノードのみを返す.find_previous_Siblings():条件を満たすすべての前の兄弟ノードを返し、リストfind_を構成します.previous_Sibling():最初の条件に合致する前の兄弟ノードを返す—————————————————————————————————————————————find_all_next():条件を満たすすべてのノードを返し、リスト結果find_next():条件を満たす最初のノードを返します.
特筆すべきは、この方法とfind_allの違いはfind_allは現在のノードの下にあるノードのみを遍歴し、find_next_allはドキュメント全体を巡ります.
———————————————————————————————————————————— find_all_previous():条件を満たすすべてのノード、リストを返します.find_previous():条件を満たす最初のノードを返します.
一例として、1つのtagオブジェクトaについて、
a.find_all_previous('b')
は、
ラベルの前に現れるすべての
ラベルを検索することを表す.3、CSSセレクタ
3.1詳細
tag.select(css)tagは
bs4.element.Tag
オブジェクト、すなわちHTMLのelementノード要素であり、selectはその検索方法であり、cssはcss構文に似た文字列であり、一般的な構造は以下の通りである:[tagName][attName[=value]]
tagNameは要素名で、指定されていない場合はすべての要素です.attName=valueは属性名であり、valueはそれに対応する値であり、属性を指定しなくてもよいし、属性を指定した後に値を指定しなくてもよい.tag.select(css)は、1つの要素だけでも1つのリストであるbs4.element.Tag
のリストを返します.たとえば、次のようになります.
tags=soup.select("p a")
tags=soup.select("a")
tags=soup.select("p[class] a")
soup.select("a[href='http://example.com/elsie']")
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
セレクタ
説明
[attName]
指定した属性を持つ要素を選択
[attName=value]
指定した属性と属性値を持つ要素を選択
[attName^=value]
属性値を一致させ、値の先頭にある要素を指定します.
[attName$=value]
属性値を一致させ、値の末尾にある要素を指定します.
[attName*=value]
属性値に指定した値を含む要素の一致
たとえば、次のようになります.
soup.select("a[href='http://example.com']") href="http://example.com" <a> ;
soup.select("a[href$='sie']") href "sie" <a> ;
soup.select("a[href^='http://example.com']") href "http://example.com" <a> ;
soupselect("a[href*='example']") href "example" <a> ;
3.2子孫ノードの検索
select(css)のcssに複数のノードがある場合、ノード要素間をスペースで区切ることは、soupなどの子孫ノードを検索することである.select(「div p」)は、
[attName=value]
ノードすべてを検索する.ノード要素間を「>」で区切る(注意>の前後に少なくとも1つのスペースが含まれている)ことは、直接サブノード、例えばsoupを検索することである.select(「div>p」)は、孫ノードを含まない
のすべてを します.
「~」で する2つのノードは、 のノードの ろにあるすべての レベルの ノード( ~ の に なくとも1つのスペースがある)を することを す、 えばsoup.select(「div~p」)は、
ノードを します.
「+」で する2つのノードは、 のノードの ろにある の レベルの ノード( + の に なくとも1つのスペースがある)を することを す: えばsoup.select(「div+p」)は、
ノードを します.
4、Tagオブジェクト
Tag、すなわちラベルには、 のような な がたくさんあります.
name
tag.name
ラベル ;
attributes
tag[‘id’]
; です. して べることができます
text
tag.text
ラベルの にあるすべてのテキストの を