BeautifulSoupは、構文解析HTMLやXMLファイルサードパーティのライブラリです。HTMLやXMLファイルには、DOMモデルで説明することができます。一般的には、3つのノードが含まれています。
- Elementノード - 通常HTMLやXMLタグを指し、
- テキストノード - タグ内のテキスト
- ノード属性 - 各タグの属性を
HTMLやXMLファイルを解析するためのBeautifulSoupライブラリ、一つ以上のラベル要素を見つけ、テキストや属性で各タグを取得します。
BeautifulSoupの素敵な機能は、それがSTRまたはバイトエンコードされたオブジェクト、およびコーディングおよびUnicodeエンコーディングに変換し、現在の文書の自動検出を受け入れることです。あなたはゴミ問題を心配することはできませんので。
インストール:beautifulsoup4をインストールPIP
使用:BS4インポートBeautifulSoupから
推奨されるインストール:PIP lxmlのをインストールし、より高速な内蔵型よりもPythonライブラリhtml.parserを解析
BeautifulSoupライブラリを使用:
主要な要素を見つけるための3つの方法があります。
- 直接検索するラベル名によると:soup.title、soup.pは、単一の要素を見つけるためにのみ適用されます。
- 使用見つけるとfind_all方法 - 文書トラバーサル検索の1つの以上の要素を抽出するために、名前タグや属性に基づいて
- 抽出された一つ以上のCSSスタイル選択に基づいて、文書要素を横断 - 選択方法を使用して
#タグ要素に応じて直接アクセス soup.p #GET Pラベル要素オブジェクト、最初の取得 soup.p.name #「p」がいることをGETのpタグ名を、 soup.p.string #のPを得るために、label要素内のテキストを soup.p [ 「クラス」 ] #取得クラス属性タグ素子Pの soup.p.get(「クラス」)位のケースに相当する soup.a [ 「のhref 」 ] #第1の要素のhref属性取得 位最初整合素子抽出するための同様のfind_all方法.findメソッド #1 find_all(名、attrsに、これを再帰的なテキスト、** kwargsから) #の タグ名を見つけるには(文字列、正規の方法で、真):名前 # attrsにします:propertyタグ # 再帰この:再帰 # テキスト:検索テキスト #** kwargsから:他のキーパラメータ #クラスがキーワードであるため、それはクラスを書き換えるべき_ =「値」は、= {attrsに「クラス」:「値」}と同等です soup.find_all (「P 」) #は、すべてのタグのPのリストを返し soup.find_all(「P 」、ATTRS = { 「クラス」:「姉妹」 }) #は、リスト形式ですべてのクラス属性を返し、Pタグ==姉妹 soup.find_allを(' P '、class_が= " シスター") #は、すべてのpタグ==姉妹のリストにクラス属性を返します soup.find_all(ID =' リンク2 ') #は、すべてのタグIDが==リンク2属性を返します soup.find_all(re.compile(" ^ B ")) #の開始要素bを見つけるために使用定期的なラベル soup.find_allを(re.compile HREF =(" エルシー")) #の定期的な使用、すべてのhref属性のリターンはラベルエルシーの含まれてい soup.find_all(ID = " リンク1 」、re.compileのhref =(' エルシー')) #のID =リンク1と前記エルシーHREFタグ #SELECT方法を- CSSセレクタ #1 注要素を抽出する方法を選択し、リストの形態である、プラス、インデックスは、テキストノートを取得 (soup.selectを「P 」)#すべてのp要素は、(「P」)soup.find_all等しく見つけるためにタグ名 soup.select(「.sister 」)#検索タグクラスは、= CSSで妹属性 soup.select(「#のリンク1を」)#すべてのidを探しますID =#リンク1要素 soup.select(' P番号のリンク1 ')#の組み合わせ要素のルックアップID = P#link11の soup.select(" ヘッド>タイトル")#は、サブ要素headタグのタイトル検索 soup.select(" Aを[クラス=「姉妹」] 「)#姉妹ラベルのすべての属性を見つける soup.selectを(」[のhref =「http://example.com/elsie」] ")#HREF = xxxのlabel要素の検索 soup.select(' Pを')[0] .get_text() #取得最初のpにおけるテキスト要素 soup.select(' [のhref = *。 "COM / EL"] ')[0] .attrs [ ' のhref ' ] #得るHREF xxx.com
()を見つけるとfind_all()に加えて、彼の息子と兄弟を検索するために使用されるいくつかの一般的な方法があります。
find_parent()
find_parents()
find_next_sibling()
find_next_siblings()
find_previous_sibling()
find_previous_siblings()
find_next()
)(find_previous
find_all_next()
find_all_previous()
この方法を選択する方法とを見つけることをノートには、以下の違い、使用していることをしてくださいノートを持っていてください。
-
メソッドの復帰に単一の要素を見つけ、find_all方法は、要素のリストを返し、メソッドを選択し、常に要素のリストを返します。あなたは、単一の要素を見つけるために、selectメソッドを使用している場合は、テキストを取得するためにGET_TEXT()メソッドを呼び出すことができます前に、インデックス[0]のリストを追加することを忘れないでください。
-
以下のように、selectメソッドよりも強力、さらに支援方法パラメータクエリを探します。
デフhas_class_no_id(タグ): リターン tag.has_attr(" クラス")及び ません tag.has_attr(" ID " ) soup.find_all(has_class_no_id) #支持方法参数