BS4のインストールと使用
'' '' '' '' ' 解析器を安装: PIP3はlxmlのインストール 解析库安装: PIP3はBS4をインストール ''' html_doc = ""」 <HTML> <HEAD> <TITLE>ヤマネの物語</ TITLE> </ヘッド> <BODY> <Pクラス= "姉妹"> <B> $、37 </ B> </ P> <Pクラス= "物語" ID = "P">昔3人の妹があった、とその名前た <a href="http://example.com/elsie" class="sister">エルシー</a>で、 <HREF = "http://example.com/lacie"クラス= "姉妹" ID = "リンク2">のLaCie </a>と <HREF = "のhttp://example.com/tillie」クラス= "姉妹" ID = "LINK3"> Tillie </a>に; 。そして、彼らはの底に住んでいただけでなく、</ P> <Pクラス= "物語"> ... </ P> ""」 から BS4インポートBeautifulSoup #Pythonのライブラリの解析来る #のスープを= BeautifulSoup(html_doc、 'html.parser') #の呼び出しは、BS4はスープ与えるオブジェクト スープ= BeautifulSoup(html_doc、' lxmlの' ) #BS4対象の 印刷(スープ) #のBS4タイプの プリントを(タイプの(スープ)) #の美化 HTML = soup.prettify() 印刷(HTML)
文書のBS4解析ツリートラバーサルライブラリー
html_doc = ""」 <HTML> <HEAD> <TITLE>ヤマネの物語</ TITLE> </ HEAD> <BODY> <Pクラス= "姉妹"> <B> $、37 </ B> </ P> <Pクラス=「物語」ID =「P」>一度3人の妹があった時間に、自分の名前だったと <a href="http://example.com/elsie" class="sister">エルシー</ A >、 <a href="http://example.com/lacie" class="sister" id="link2">レイシー</a>と <HREF = "http://example.com/tillie"クラス= "姉妹" ID = "LINK3"> Tillie </a>に; 。そして、彼らはの底に住んでいただけでなく、</ P> <Pクラス= "物語"> ... </ P> ""」 から BS4の輸入BeautifulSoup スープ = BeautifulSoup(html_doc、' lxmlの' ) #印刷(スープ) #の印刷(タイプの(スープ)) #ドキュメントツリーのトラバース #1を、直接***** 印刷(soup.html) 印刷(タイプの(soup.html)) 印刷(soup.a) 印刷(スープ.P) #2は、タグ名取得 印刷(soup.a.name) #3は、属性タグを取得***** 印刷(soup.a.attrs) #はラベルのすべてのプロパティを取得 印刷(スープを。 a.attrs [ ' HREF ' ]) #4、ラベルテキストを取得***** 印刷(soup.p.text) #$ 37 #5、ネストされたSELECT 印刷(soup.html.body.p) #図6に示すように、子ノード、子孫ノード プリント(soup.p.children) #戻りイテレータオブジェクト プリント(リスト(soup.p.children)) #[<B> 37 $ </ B>] #7、親ノード、ノードの祖先 印刷(soup.b.parent) 印刷(soup.b.parents) 印刷(一覧(soup.b.parents)) #8、兄弟姉妹(兄弟:兄弟) 印刷(soup.a) #次の兄弟ノードを取得します 印刷(soup.a.next_sibling) #は、すべての次の兄弟ノードを取得し、発電機返し 印刷(soup.a.next_siblings) 印刷(一覧(soup.a.next_siblings)) #は兄弟取得 を印刷します( soup.a.previous_sibling) #リターン上のすべての兄弟ノードを取得し、発電機で 印刷(一覧(soup.a.previous_siblings))
ドキュメントツリー検索をBS4
「」「」「」 「'」 検索を:最初に見つけ すべて見つける:find_all ラベルをし、発見するプロパティを探し: name属性が一致する 名前のタグ名 attrsには、一致を見つけるために、属性 、テキストマッチングテキスト ラベルを: -文字列フィルタ 文字列がグローバルに一致するように -定期的なフィルター 試合再モジュール -フィルタリストの データは、リストと一致する - BOOLフィルタ トゥルーマッチ -メソッドのフィルタ プロパティの一部で使用されるには、不要な属性検索します。 プロパティ: - class_が - ID '' ' html_doc = "" " <HTML> <HEAD> <TITLE>ヤマネの物語</ TITLE> </ HEAD> <BODY> <Pクラス= "姉妹"> <B> $、37 </ B> </ P> <Pクラス= "物語" ID =「P」>昔3人の妹がありました。その名前は、<a href="http://example.com/elsie" class="sister">エルシー</a>の<のhref = "http://example.com/lacie"クラス= "姉妹"でしたID =「リンク2」>レイシー</a>と<a href="http://example.com/tillie" class="sister" id="link3"> Tillie </a>と、彼らはの底に住んでいました十分ます。</ p> <pクラス= "物語"> ... </ P> ""」 '' ' 过滤は楽器字符串 ''' P = soup.find(名前= ' P ' ) P_S = soup.find_all(名前= ' P ' ) 印刷(P) プリント(P_S) #1 名+ attrsに P =スープ。 (名前=見つける' P '、attrsに= { " ID ":" P " }) 印刷(P) #の名前+テキスト タグ= soup.find(名前= ' タイトル'、テキスト= " ヤマネの物語") 印刷(タグ) #1 名+テキスト+ ATTRS タグ= soup.find(NAME = ' A '、ATTRS = { " クラス":" SISTER " }、テキスト= " エルシー" ) プリント(タグ) '' ' -正規フィルタ モジュールに一致再 '' ' インポート再 #名前 #マッチングノードとREモジュールを (A = soup.find = re.compile名(' A ' )) プリント(A) A_S = soup.find_all(名=再.compile(' A ')) 印刷(A_S) #ATTRS A = soup.find(ATTRS = { " ID ":re.compile(' リンク' )}) プリント(A) #-リストフィルタ #の一致のリスト内のデータ を印刷する(soup.find(名前= [ ' A '、' P '、' HTML '、re.compile(' A ' )])) プリント(soup.find_all(名= [ ' A '、' P '、' HTML '、再。コンパイル(' A ' )])) #- BOOLフィルタ #真のマッチ プリント(soup.find(名=真、attrsには、= { " ID " :真})) #-フィルタ方法 #特性のいくつかのためにすることはありませんあなたは、プロパティを見つける必要があります。 DEFのhave_id_not_class(タグ): #の印刷(tag.name) のIF tag.name == ' p型' と tag.has_attr(" 上記のIDを述べた")及び ませんが、 tag.has_attr(" クラス" ): リターンタグ #の印刷(soup.find_all (名=関数オブジェクト)) 印刷(soup.find_all(名= have_id_not_class)) #补充知识点: #1 のID A = soup.find(ID = ' リンク2 ' ) プリント(a)の #のクラス P = soup.find(class_が= ' 姉妹' ) 印刷( P)