Pythonクローラー学習(5)bs4ライブラリに基づくHTMLコンテンツの取得

(5)bs4ライブラリに基づくHTMLコンテンツの取得

(1)情報のマーキング

  • マークされた情報は、情報の次元を増やす情報編成構造を形成できます。

  • タグの構造は情報と同じくらい重要です

  • マークされた情報は、通信、保存、または表示に使用できます

  • マークされた情報は、プログラムの理解と応用に役立ちます

  • 例:HTMLはWWW(World Wide Web)情報の整理方法です

  • HTMLは、事前定義された<>…</>タグを通じてさまざまなタイプの情報を整理します

(2)3種類の情報マーキング

1.XML

<!-- XML(eXtensible Markup Language) -->

<!-- 标签tag -->
<!-- 名称img 后接属性 -->
<img src="china.jpg" size="10">...</img>
<!-- 空元素的缩写形式 -->
<img src="china.jpg" size="10" />
<name>...</name>
<name />
<!-- -->

2.JSON

  • JSON仕様によると、コメントはサポートされていません
  • 主に過度のコメントを防止し、ファイル自体のデータキャリアに影響を与える目的で
JSON(JavaScript Object Notation)

//有类型的键值对 key:value
//"name"是类型
"name" : "靓仔"
//多值用[,]组织
"name" : ["靓仔", "美眉"]
//键值对嵌套用{,}
"name" : {
    "newName" : "钢铁侠二代" ,
    "oldName" : "钢铁侠一代"
}

//三种书写形式
"key" : "value"
"key" : ["value1", "value2"]
"key" : {"subkey" : "subvalue"}

3.YAML

YAML(YAML Ain't Markup Language)

# 无类型的键值对 key:value
# name仅是字符串
name : 靓仔
# 缩进表达所属关系
name :
	newName : 钢铁侠二代
	oldName : 钢铁侠一代
# - 表达并列关系
name :
-钢铁侠二代
-钢铁侠一代
# | 表达整块数据
text: |		#示例乱码
sdadadwafaqagerghehreqtggfqegqeg
regrqegrqegeqgreqgregqegqergqert

# 三种书写形式
key : value
key : #Comment
-value1
-value2
key :
	subkey : subvalue

(3)3種類の情報マーキングの比較

  • XML

  • 最も初期の一般的な情報マークアップ言語、優れたスケーラビリティ、ただし扱いにくい

  • インターネット上の情報交換と送信

  • JSON

  • プログラム処理(js)に適した、XMLよりも簡潔なタイプの情報があります。

  • モバイルアプリケーションクラウドとノード情報通信、メモなし

  • Yamla

  • 情報の種類がなく、テキスト情報の割合が最も高く、読みやすい

  • さまざまなシステムの設定ファイル、メモで読みやすい

(4)情報抽出と方法

  • 情報抽出:マークされた情報から関心のあるコンテンツを抽出します

1.一般的な方法1

  • 情報のマークアップフォームを完全に分析し、重要な情報を抽出する
  • XML、JSON、YAML)
  1. たとえば、タグパーサーが必要です:bs4ライブラリのタグツリートラバーサル
  2. 利点:正確な情報分析
  3. 短所:抽出プロセスが面倒で遅い

2.一般的な方法2

  • マークフォームを無視して、主要な情報を直接検索する
  1. 検索:情報のテキストの機能を見つける
  2. 利点:抽出プロセスはシンプルで高速です
  3. 抽出結果の正確さは情報コンテンツに関連しています

3.フュージョン法

  • 形式分析と検索方法を組み合わせて主要な情報を抽出する
  • (XML、JSON、YAML、検索)
  • タグパーサーとテキスト検索機能が必要

4.例

ここに画像の説明を挿入

(5)bs4ライブラリに基づくHTMLコンテンツ検索方法

# 返回一个列表类型,存储查找的结果
<>.find_all(name, attrs, recursive, string, **kwargs)

# 检索目标标签名为a,b
soup.find_all('a')
soup.find_all(['a','b'])
# 检索目标标签名为p,含属性course
soup.find_all('p','course')
# 检索目标含指定属性,引入re库(正则表达式库)
soup.find_all(id='link1')
soup.find_all(id=re.compile('link'))

#由于find_all方法很常用,为方便使用
<tag>(..) 等价于 <tag>.find_all(..)
soup(..)  等价于 soup.find_all(..)
パラメータ名 解説
名前 タグ名の検索文字列
attrs タグ属性値の検索文字列
再帰的 すべての子孫を検索するかどうか、デフォルトはTrue
ストリング <>…</>の文字列領域の検索文字列
方法 解説
<>。find() 1つの結果、文字列型のみを検索して返す
<>。find_parents() 祖先ノードを検索し、リストタイプを返す
<>。find_parent() 祖先ノードで結果を返す
<>。find_next_siblings() 後続の並列ノードを検索し、リストタイプを返す
<>。find_next_sibling() 後続の並列ノードで結果を返す
<>。find_previous_siblings() 事前注文並列ノードを検索し、リストタイプを返します
<>。find_previous_sibling() preorder並列ノードで結果を返す
方法 解説
<>。find() 1つの結果、文字列型のみを検索して返す
<>。find_parents() 祖先ノードを検索し、リストタイプを返す
<>。find_parent() 祖先ノードで結果を返す
<>。find_next_siblings() 後続の並列ノードを検索し、リストタイプを返す
<>。find_next_sibling() 後続の並列ノードで結果を返す
<>。find_previous_siblings() 事前注文並列ノードを検索し、リストタイプを返します
<>。find_previous_sibling() preorder並列ノードで結果を返す
オリジナルの記事を10件公開 いいね1 訪問数137

おすすめ

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