Python中BeautifulSoup4的基本使用

CSS 選擇器:BeautifulSoup4

from: Mp
ps: 下文的使用方法只列出了常用的,詳細(xì)請(qǐng)看官方文檔

概念

Beautiful Soup基于HTMLDOM,會(huì)載入整個(gè)文檔,解析整個(gè)DOM樹(shù)

官方文檔:

http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

使用

創(chuàng)建bs對(duì)象

# 打開(kāi)本地HTML文件的方式來(lái)創(chuàng)建對(duì)象
soup = BeautifulSoup(open('xxxx.html'))
# 創(chuàng)建Beautiful Soup對(duì)象
soup = BeautifulSoup(html, "lxml")  # 指定lxml解析器

格式化輸出soup對(duì)象內(nèi)容

print(soup.prettify())

Tag 類(lèi)

# 獲取Tag  soup.標(biāo)簽名  查找的是在所有內(nèi)容中的第一個(gè)符合要求的標(biāo)簽
print(soup.標(biāo)簽名)

# name是獲取當(dāng)前標(biāo)簽名稱,soup.name為[document]
print(soup.標(biāo)簽名.name)

# attrs獲取當(dāng)前標(biāo)簽的所有屬性和值,以鍵值對(duì)形式存入字典返回  下文以 a 標(biāo)簽為例
print(soup.a.attrs)
# 獲取標(biāo)簽?zāi)骋粚傩缘闹?print(soup.a['href'])
# 修改標(biāo)簽?zāi)骋粋€(gè)屬性的值
soup.a['href'] = "http://www.peipeipei.com"
# 刪除某一屬性
del soup.a['class']

NavigableString 類(lèi) 以p標(biāo)簽為例

# 獲取標(biāo)簽內(nèi)內(nèi)容
print(soup.p.string)
print(type(soup.p.string))

Comment類(lèi) 以a標(biāo)簽為例,a標(biāo)簽內(nèi)內(nèi)容為注釋

<a  class="sister" id="link1"><!-- Elsie --></a>,

print(soup.a.string)  # 注釋符號(hào)不輸出,只輸出內(nèi)容
# Elsie
print(type(soup.a.string))
# <class 'bs4.element.Comment'>

遍歷文檔樹(shù) 以head標(biāo)簽為例

"<head><title>The Dormouse's story</title></head>"

#  .content 屬性可以將tag的子節(jié)點(diǎn)以列表的方式輸出
print(soup.head.contents)
# [<title>The Dormouse's story</title>]
print(soup.head.contents[1])  # 獲取列表中某一元素

# .children 返回的是一個(gè)list生成器對(duì)象
print(soup.head.children)
# <listiterator object at 0x7f71457f5710>
for child in soup.body.children:
    print(child)

# .descendants 對(duì)所有tag的子孫節(jié)點(diǎn)進(jìn)行遞歸循環(huán)
for child in soup.descendants:
    print(child)


# .string 返回最里面的內(nèi)容
print(soup.head.string)
print(soup.title.string)  # 兩個(gè)輸出是一樣的

搜索文檔樹(shù)

find_all(name, attrs, recursive, text, **kwargs)
# find用法相同,只返回一個(gè)

# name參數(shù)可以查找所有名字為 name 的tag,可以是字符串,正則表達(dá)式,列表
print(soup.find_all('a'))
for tag in soup.find_all(re.compile("^b")):
    print(tag.name)
print(soup.find_all(["a", "b"]))

# keyword參數(shù)直接匹配屬性對(duì)應(yīng)的值
print(soup.find_all(class_="sister"))  # 因?yàn)閏lass在python中已經(jīng)有了,為了防止沖突,所以是class_
print(soup.find_all(id='link2'))

# text參數(shù)搜索文檔中的字符串內(nèi)容,與name參數(shù)的可選值一樣,text參數(shù)接受字符串,正則表達(dá)式,列表
print(soup.find_all(text="Elsie"))
print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
print(soup.find_all(text=re.compile("Dormouse")))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容