1. 程式人生 > >【python爬蟲筆記】網路爬蟲之提取

【python爬蟲筆記】網路爬蟲之提取

unit 4 BeautifulSoup庫入門

BeautifulSoup庫是解析、遍歷、維護“標籤樹”的功能庫

  • 標籤 tag
  • name(成對出現) attributes(0或多個)

beautifulSoup對應一個html/xml文件的全部內容

beautiful soup庫解析器
解析器 使用方法 條件
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 install html5lib

beautifulSoup類的基本元素

基本元素 說明
Tag 最基本的資訊組織單元,用<>和標明開頭和結尾
Name …的名字是 p, .name
Attributes 字典形式組織,.attrs
NavigableString <>…中字串,.string
Comment 標籤內字串的註釋部分,一種特殊的Comment型別

任何存在於HTML語法中的標籤都可以用soup.訪問獲得。當HTML文件中存在多個相同對應內容時,soup.返回第一個

NavigableString可以跨越多個層次

基於bs4庫的HTML內容遍歷方法

< >…< /> 構成了所屬關係,形成了標籤的樹形結構

標籤樹的下行遍歷
屬性 說明
.contents 子節點的列表,將所有兒子節點存入列表
.children 子節點的迭代型別,與.content類似,永遠迴圈遍歷兒子節點
.descendants 子孫節點的迭代型別,包含所有子孫節點,用於迴圈遍歷

BeautifulSoup型別是標籤樹的根節點

標籤樹的上行遍歷
屬性 說明
.parent 節點的父標籤
.parents 節點先輩標籤的迭代型別,用於迴圈遍歷先輩節點

遍歷所有先輩節點,包括soup本身

標籤樹的平行遍歷
屬性 說明
.next_sibling 返回按照HTML文字順序的下一個平行節點標籤
.previous_sibling 返回按照HTML文字順序的上一個平行節點標籤
.next_sibling 迭代型別,返回按照HTML文字順序的後續所有平行節點標籤
.previous_siblings 迭代型別,返回按照HTML文字順序的前續所有平行節點標籤

平行遍歷發生在同一個父節點下的各個節點間

基於bs4庫的HTML格式輸出
prettify()方法

為HTML文字<>及內容增加‘\n’

可用於標籤,方法:< tag >.prettify()

bs4庫的編碼

bs4庫將任何HTML輸入都變成utf-8編碼

python3預設支援編碼是utf-8, 解析無障礙

Unit5 資訊標記與提取方法

資訊標記的三種形式
XML 最早的通用資訊標記語言,可擴充套件性好,但繁瑣 Internet上的資訊互動與傳遞
JSON 資訊有型別,適合程式處理,較XML簡潔 移動應用雲端和節點的資訊通訊,無註釋
YAML 資訊無型別,文字資訊比例最高,可讀性好 各類系統的配置檔案,有註釋易讀
資訊提取的一般方法

方法一:完整解析資訊的標記形式,再提取關鍵資訊

需要標記解析器,例如:bs4庫的標籤樹遍歷

優點:資訊解析準確

缺點:提取過程繁瑣,速度慢

方法二:無視標記形式,直接搜尋關鍵資訊

對資訊的文字查詢函式即可

優點:提取過程簡潔,速度較快

缺點:提取結果準確性與資訊內容相關

基於bs4庫的HTML內容查詢方法

<>.find_all(name, attrs, recursive, string, **kwargs)

​ 返回一個列表型別,儲存查詢的結果

​ recursive:是否對子孫全部檢索,預設True

​ String:<>content< /> 中字串區域的檢索字串

< tag >(..) 等價於 < tag >.find_all(..)

soup(..) 等價於 soup.find_all(..)