Beautiful Soup庫(kù)解析器
soup = BeautifulSoup('<html>data</html>'甲捏,'html.parser')
解析器 | 使用方法 | 條件 |
---|---|---|
bs4的HTML解析器 | BeautifulSoup(mk,'html.parser') | 安裝bs4庫(kù) |
lxml的HTML解析器 | BeautifulSoup(mk,'lxml') | pip install lxml |
lxml的XML解析器 | BeautifulSoup(mk,'xml') | pip install lxml |
html5lib的解析器 | BeautifulSoup(mk,'html5lib') | pip install html5lib |
BeautifulSoup類的基本元素
<p class=“title”>… </p>
基本元素 | 說(shuō)明 |
---|---|
Tag | 標(biāo)簽禀综,最基本的信息組織單元界酒,分別用<>和</>標(biāo)明開(kāi)頭和結(jié)尾 |
Name | 標(biāo)簽的名字斟珊,<p>…</p>的名字是'p'怎静,格式:<tag>.name |
Attributes | 標(biāo)簽的屬性完疫,字典形式組織断医,格式:<tag>.attrs |
NavigableString | 標(biāo)簽內(nèi)非屬性字符串滞乙,<>…</>中字符串,格式:<tag>.string |
Comment | 標(biāo)簽內(nèi)字符串的注釋部分鉴嗤,一種特殊的Comment類型 |
標(biāo)簽樹(shù)的遍歷
- 下行遍歷
- 上行遍歷
- 平行遍歷
標(biāo)簽樹(shù)的下行遍歷
屬性 | 說(shuō)明 |
---|---|
.contents | 子節(jié)點(diǎn)的列表斩启,將<tag>所有兒子節(jié)點(diǎn)存入列表 |
.children | 子節(jié)點(diǎn)的迭代類型,與.contents類似醉锅,用于循環(huán)遍歷兒子節(jié)點(diǎn) |
.descendants | 子孫節(jié)點(diǎn)的迭代類型兔簇,包含所有子孫節(jié)點(diǎn),用于循環(huán)遍歷 |
BeautifulSoup類型是標(biāo)簽樹(shù)的根節(jié)點(diǎn)
for child in soup.body.children:
print(child) 遍歷兒子節(jié)點(diǎn)
for child in soup.body.descendants:
print(child) 遍歷子孫節(jié)點(diǎn)
標(biāo)簽樹(shù)的上行遍歷
屬性 | 說(shuō)明 |
---|---|
.parent | 節(jié)點(diǎn)的父親標(biāo)簽 |
.parents | 節(jié)點(diǎn)先輩標(biāo)簽的迭代類型荣挨,用于循環(huán)遍歷先輩節(jié)點(diǎn) |
遍歷所有先輩節(jié)點(diǎn)男韧,包括soup本身,所以要區(qū)分辨別
標(biāo)簽樹(shù)的平行遍歷
屬性 | 說(shuō)明 |
---|---|
.next_sibling | 返回按照HTML文本順序的下一個(gè)平行節(jié)點(diǎn)標(biāo)簽 |
.previous_sibling | 返回按照HTML文本順序的上一個(gè)平行節(jié)點(diǎn)標(biāo)簽 |
.next_siblings | 迭代類型默垄,返回按照HTML文本順序的后續(xù)所有平行節(jié)點(diǎn)標(biāo)簽 |
.previous_siblings | 迭代類型此虑,返回按照HTML文本順序的前續(xù)所有平行節(jié)點(diǎn)標(biāo)簽 |
for sibling in soup.a.next_sibling:
print(sibling) 遍歷后續(xù)節(jié)點(diǎn)
for sibling in soup.a.previous_sibling:
print(sibling) 遍歷前續(xù)節(jié)點(diǎn)
bs4庫(kù)的prettify()方法
.prettify()為HTML文本<>及其內(nèi)容增加更加'\n'
.prettify()可用于標(biāo)簽,方法:<tag>.prettify()
bs4庫(kù)的編碼
bs4庫(kù)將任何HTML輸入都變成utf‐8編碼
Python 3.x默認(rèn)支持編碼是utf‐8,解析無(wú)障礙
??