BeautifulSoup庫
Beautiful Soup是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間.
--------選自bs4官方文檔
Beautiful Soup庫是解析、遍歷、維護“標籤樹”的功能庫
BeautifulSoup(r.text, 'html.parser')
使用HTML解析器解析r.text
BeautifulSoup類的基本元素
基本元素 | 說明 |
---|---|
Tag | 標籤,最基本的信息組織單元,分別用<>和</>標明開頭和結尾 |
Name | 標籤的名字,<p>…</p>的名字是’p’,格式:.name |
Attributes | 標籤的屬性,字典形式組織,格式:.attrs |
NavigableString | 標籤內非屬性字符串,<>…</>中字符串,格式:.string |
Comment | 標籤內字符串的註釋部分,一種特殊的Comment類型 |
標籤樹的下行遍歷
屬性 | 說明 |
---|---|
.contents | 子節點的列表,將所有兒子節點存入列表 |
.children | 子節點的迭代類型,與.contents類似,用於循環遍歷兒子節點 |
.descendants | 子孫節點的迭代類型,包含所有子孫節點,用於循環遍歷 |
標籤樹的上行遍歷
屬性 | 說明 |
---|---|
.parent | 節點的父親標籤 |
.parents | 節點先輩標籤的迭代類型,用於循環遍歷先輩節點 |
標籤樹的平行遍歷
屬性 | 說明 |
---|---|
.next_sibling | 返回按照HTML文本順序的下一個平行節點標籤 |
.previous_sibling | 返回按照HTML文本順序的上一個平行節點標籤 |
.next_siblings | 迭代類型,返回按照HTML文本順序的後續所有平行節點標籤 |
.previous_siblings | 迭代類型,返回按照HTML文本順序的前續所有平行節點標籤 |
<>.find_all(name, attrs, recursive, string, **kwargs)
- name : 對標籤名稱的檢索字符串
- attrs: 對標籤屬性值的檢索字符串,可標註屬性檢索
- recursive: 是否對子孫全部檢索,默認True
- string: <>…</>中字符串區域的檢索字符串
<tag>(..)
等價於<tag>.find_all(..)
soup(..)
等價於soup.find_all(..)
方法 | 說明 |
---|---|
<>.find() | 搜索且只返回一個結果,同.find_all()參數 |
<>.find_parents() | 在先輩節點中搜索,返回列表類型,同.find_all()參數 |
<>.find_parent() | 在先輩節點中返回一個結果,同.find()參數 |
<>.find_next_siblings() | 在後續平行節點中搜索,返回列表類型,同.find_all()參數 |
<>.find_next_sibling() | 在後續平行節點中返回一個結果,同.find()參數 |
<>.find_previous_siblings() | 在前序平行節點中搜索,返回列表類型,同.find_all()參數 |
<>.find_previous_sibling() | 在前序平行節點中返回一個結果,同.find()參數 |
常用的信息標記的三種形式:XML,JSON,YAML
XML實例
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中關村南大街5號</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof><prof>Security</prof>
</person>
JSON實例
{
“firstName” : “Tian” ,
“lastName” : “Song” ,
“address” : {
“streetAddr” : “中關村南大街5號” ,
“city” : “北京市” ,
“zipcode” : “100081”
} ,
“prof” : [ “Computer System” , “Security” ]
}
YAML
firstName: Tian
lastName: Song
address:
streetAddr: 中關村南大街5號
city: 北京市
zipcode: 100081
prof:
‐Computer System
‐Security
三種格式的對比
格式 | 特點 | 用途 |
---|---|---|
XML | 最早的通用信息標記語言,可擴展性好,但繁瑣 | Internet上的信息交互與傳遞 |
JSON | 信息有類型,適合程序處理(js),較XML簡潔 | 移動應用雲端和節點的信息通信,無註釋 |
YAML | 信息無類型,文本信息比例最高,可讀性好 | 各類系統的配置文件,有註釋易讀 |