Pythonクローラー学習(4)Beautiful Soupライブラリーの紹介

(4)Beautiful Soupライブラリを使い始める

BeautifulSoupライブラリの公式ドキュメント

(1)Beautiful Soupライブラリの基本要素

  • ビューティフルスープライブラリは、「タグツリー」を解析、走査、維持するための関数ライブラリです。
<p class="title">...</p>

<p>..</p>	 :标签 Tag
	p		 :名称 Name (成对出现)
class='title':属性 Attributes (0个或多个)
  • BeautifulSoupはHTML / XMLドキュメントのコンテンツ全体に対応します
from bs4 import BeautifulSoup
soup1 = BeautifulSoup("<html>data</html>","html.parser")
soup2 = BeautifulSoup("open("D://demo.html")","html.parser")

(2)BeautifulSoupライブラリパーサー

パーサー 使い方 状態
bs4のHTMLパーサー BeautifulSoup(「mk」、「html.parser」 bs4ライブラリをインストールする
lxml HTMLパーサー BeautifulSoup(“ mk”、“ lxml” pip install lxml
lxmlのXMLパーサー BeautifulSoup(“ mk”、“ xml” pip install lxml
html5libのパーサー BeautifulSoup(“ mk”、“ html5lib” pipインストールhtml5lib

(3)BeautifulSoupクラスの基本要素

例:<p class="title">...</p>
基本要素 解説
鬼ごっこ <>と</>で始まる、情報の編成の最も基本的な単位であるタグは、開始と終了を示します
名前 ラベルの名前、

名前は「p」で、形式は.nameです。
の属性 辞書形式で編成されたタグ属性、形式:.attrs
NavigableString タグ内の非属性文字列、<> ... </>内の文字列、形式:.string
コメント ラベル内の文字列のコメント部分、特別なタイプのコメント
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,"html.parser")
soup.title		#获得标题
soup.a			#格式:soup.<tag>,文档中存在多个相同<tag>,只返回第一个
soup.find_all('a')	#找到文档中所有的<a>标签
soup.get_text()		#从文档中获取所有文字内容

#获取<tag>的名字,格式:<tag>.name,字符串类型
soup.a.name		
soup.a.parent.name
soup.a.parent.parent.name

#一个<tag>可以有0或多个属性,字典类型
tag.attrs
tag.attrs['class']

#NavigableString类型可以跨越多个层次
soup.a.string		#bs4.element.NavigableString类型

#Comment是一种特殊类型
newsoup = BeautifulSoup("<b><!--This is a comment--></b><p>This is not a comment</p>","html.parser")
newsoup.b.string	#bs4.element.Comment类型
newsoup.p.string	#bs4.element.NavigableString类型

(4)bs4ライブラリに基づくHTMLコンテンツトラバーサルメソッド

HTML基本フォーマット
木を横切る

1.タグツリーの下向きトラバーサル

  • BeautifulSoupタイプはタグツリーのルートノードです
の属性 解説
.contents 子ノードのリスト、すべての息子ノードをリストに保存します
。子供達 .contentsに類似した子ノードの反復タイプは、息子ノードをループするために使用されます
。子孫 ループトラバーサルのためのすべての子孫ノードを含む子孫ノードの反復タイプ
soup = BeautifulSoup(demo, "html.parser")
soup.head				#获取head
soup.head.contents		#获取head的子节点列表
soup.body.contents		#获取body的子节点列表
len(soup.body.contents)	#获取body的子节点列表长度
soup.body.contents[1]

#下行遍历儿子节点
for child in soup.body.children:
    print(child)
    
#下行遍历子孙节点
for child in soup.body.descendants:
    print(children)

2.タグツリーのアップリンクトラバーサル

の属性 解説
。親 ノードの親ラベル
。親 祖先ノードをループするために使用されるノード祖先ラベルの反復タイプ
#遍历所有先辈节点,包括soup本身,所以要区别判断
soup = BeautifulSoup(demo, "html.parser")
for parent in soup.a.parents:
	if parent is None:
    	print(parent)
   	else:
        print(parent.name)

3.ラベルツリーの並列走査

の属性 解説
.next_sibling 次の並列ノードラベルをHTMLテキスト順に返します
.previous_sibling 前の並列ノードラベルをHTMLテキスト順に返します
.next_siblings 反復タイプ。後続の並列ノードタグをHTMLテキスト順に返します
.previous_siblings 反復タイプ。以前の並列ノードタグをHTMLテキスト順に返します

並列走査

#遍历后续节点
for sibling in soup.a.next_sibling:
	print(sibling)

#遍历前续节点    
for sibling in soup.a.previous_sibling:
	print(sibling)

(5)bs4ライブラリに基づくHTML形式の出力

#美化输出
#.prettify()为HTML文本<>及其内容增加了'\n'
soup.prettify()
#.prettify()可用于标签
soup.a.prettify()

ノードタグ|
| .previous_sibling |前の並列
ノードタグをHTMLテキスト順で返す| | .next_siblings |反復タイプ、後続の並列ノードタグをHTMLテキスト順で返す|
| .previous_siblings |反復タイプ、HTMLテキスト順で返す前の並列ノードラベル|

[外部リンク画像を転送しています...(img-mxfhEfda-1586863050051)]

#遍历后续节点
for sibling in soup.a.next_sibling:
	print(sibling)

#遍历前续节点    
for sibling in soup.a.previous_sibling:
	print(sibling)

(5)bs4ライブラリに基づくHTML形式の出力

#美化输出
#.prettify()为HTML文本<>及其内容增加了'\n'
soup.prettify()
#.prettify()可用于标签
soup.a.prettify()
  • bs4ライブラリは、HTML入力をUTF-8エンコーディングに変換します
オリジナルの記事を10件公開 いいね1 訪問数139

おすすめ

転載: blog.csdn.net/qq_39419113/article/details/105519006