Beautiful Soup是一種Python的解析庫,主要用于解析和處理HTML/XML內(nèi)容。它是基于Python的標(biāo)準(zhǔn)庫和第三方庫的結(jié)合,能夠提供簡便的方式實(shí)現(xiàn)文本的查找、修改和提取操作。
(資料圖)
HTML指的是超文本標(biāo)記語言(Hypertext Markup Language),即一種用于描述網(wǎng)頁內(nèi)容的標(biāo)記語言。在我們訪問一個網(wǎng)頁的時候,瀏覽器便會將HTML內(nèi)容下載到本地并以可視化的形式展示給我們。但是,在程序員的世界里我們需要能夠?qū)TML內(nèi)容進(jìn)行更多的操作,而Beautiful Soup就是這種工具之一。
Beautiful Soup能夠解析HTML內(nèi)容并轉(zhuǎn)化成一個復(fù)雜的樹結(jié)構(gòu),然后可以通過標(biāo)簽名、屬性名等多種方式進(jìn)行內(nèi)容的查找和修改。使用Beautiful Soup不僅能夠讓我們更高效地處理HTML內(nèi)容,而且還能避免很多手動操作引起的誤差。
下面我們來詳細(xì)介紹Beautiful Soup的使用方式和應(yīng)用場景。
Beautiful Soup提供的解析器有bs3、bs4,其中bs3逐漸被棄用,目前bs4為最新版。我們主要介紹bs4的使用。
首先,我們需要安裝Beautiful Soup庫。在終端輸入以下命令:
pip install beautifulsoup4
安裝成功后,我們通過import語句將Beautiful Soup庫引入程序中。
from bs4 import BeautifulSoup
接下來假設(shè)我們有一個HTML文本:
Beautiful Soup Tutorial Python BeautifulSoup Tutorial
這是一篇Beautiful Soup入門教程
它將介紹Beautiful Soup的基本用法以及一些高級的應(yīng)用場景
點(diǎn)擊訪問示例網(wǎng)站
我們可以通過以下語句將HTML文本解析成BeautifulSoup對象:
soup = BeautifulSoup(html_doc, "html.parser")
其中,html_doc為上述HTML文本,"html.parser’為指定的解析器。
Beautiful Soup提供了多種標(biāo)簽選擇器,能夠便捷地從HTML文本中選擇需要的內(nèi)容。
選擇標(biāo)簽名為h1的元素:
soup.select("h1")
結(jié)果為:
[
Python BeautifulSoup Tutorial
]
選擇標(biāo)簽名為p且class屬性為“intro”的元素:
soup.select("p.intro")
結(jié)果為:
[
這是一篇Beautiful Soup入門教程
]
選擇標(biāo)簽名為a且class屬性為“l(fā)ink”的元素,其href屬性的值為"http://www.example.com":
soup.select("a.link[)
結(jié)果為:
我們可以通過Beautiful Soup的樹型結(jié)構(gòu),對HTML文本進(jìn)行各種查找與修改操作。
可以通過嵌套選擇標(biāo)簽,定位到HTML文本中需要的標(biāo)簽,例如選擇“div”標(biāo)簽下的所有“p”標(biāo)簽。
content = soup.select("div.article > p")
可以看到,選擇結(jié)果為兩個“p”標(biāo)簽。
[這是一篇Beautiful Soup入門教程
,它將介紹Beautiful Soup的基本用法以及一些高級的應(yīng)用場景
]
.string/.text屬性獲取標(biāo)簽內(nèi)容
可以通過.string屬性或.text屬性獲取標(biāo)簽內(nèi)的文本內(nèi)容。
例如,獲取標(biāo)題“h1”標(biāo)簽內(nèi)的文本內(nèi)容:
title = soup.select("h1")[0].string print(title)
輸出結(jié)果為:
Python BeautifulSoup Tutorial
可以看到,.string相比于.text屬性更加精確,可以避免獲取到標(biāo)簽內(nèi)的其他內(nèi)容干擾。
.get()方法獲取標(biāo)簽屬性值
可以通過.get()方法獲取標(biāo)簽內(nèi)的屬性值。例如,獲取“a”標(biāo)簽的href屬性值:
link = soup.select("a.link")[0].get("href") print(link)
輸出結(jié)果為:
http://www.example.com
除了查找與獲取HTML文本的內(nèi)容,我們還可以使用Beautiful Soup對HTML文本進(jìn)行修改操作。
修改標(biāo)簽屬性值
通過tag對象的.attrs屬性可以獲取標(biāo)簽的屬性,使用該屬性進(jìn)行修改操作。
例如,將“a”標(biāo)簽的href屬性值修改為“http://www.newexample.com”:
link_tag = soup.select("a.link")[0] link_tag["href"] = "http://www.newexample.com" print(link_tag)
可以看到,輸出結(jié)果中href屬性值已經(jīng)被修改。
點(diǎn)擊訪問示例網(wǎng)站
修改標(biāo)簽文本內(nèi)容
通過tag對象的.string屬性或replace_with()方法可以修改標(biāo)簽的文本內(nèi)容。
例如,將第一個“p”標(biāo)簽的文本修改為“歡迎來到Beautiful Soup教程”:
p_tag = soup.select("p.intro")[0] p_tag.string = "歡迎來到Beautiful Soup教程" print(p_tag)
輸出結(jié)果為:
歡迎來到Beautiful Soup教程
增加標(biāo)簽和刪除標(biāo)簽
我們可以使用Beautiful Soup提供的函數(shù),例如new_tag()、new_string()、append()和insert()等方法,創(chuàng)建新標(biāo)簽或文本,并插入HTML文本當(dāng)中。
例如,我們通過append()方法在“body”標(biāo)簽的末尾增加一個“div”標(biāo)簽:
new_div = soup.new_tag("div") new_div.string = "這是Beautiful Soup教程的結(jié)尾" soup.select("body")[0].append(new_div) print(soup)
可以看到,輸出結(jié)果中的HTML文本結(jié)尾增加了一個新的“div”標(biāo)簽。
美食網(wǎng)站信息爬取
我們將以美食網(wǎng)站中的“熱門排行榜”為例進(jìn)行演示。
首先,我們需要通過requests庫獲取HTML文本。以“熱門排行榜”頁面為例:
import requests from bs4 import BeautifulSoup url = "https://www.meishij.net/chufang/diy/diy_rmphb/" html = requests.get(url) soup = BeautifulSoup(html.text, "html.parser")
我們可以通過觀察HTML文本,發(fā)現(xiàn)熱門排行榜的信息在“div”標(biāo)簽中,具體位置在“div.zg_wrap”標(biāo)簽中,而餐品名稱在“div.zg_wrap > li > div > p > a”標(biāo)簽中。因此,我們可以使用以下語句提取美食名稱:
for i, li in enumerate(soup.select("div.zg_wrap > li")): name = li.select("div > p > a")[0].get("title") print(f"{i+1}. {name}")
可以看到,我們已成功提取出了美食名稱,輸出結(jié)果如下:
1. 漢堡
2. 糯米飯
3. 明爐烤鴨
4. 龍蝦
5. 火鍋
6. 美式薯條
7. 叉燒肉
8. 紅燒肉
9. 快手美食
10. 韓國泡菜
至此,我們已經(jīng)成功通過Beautiful Soup解析庫,提取出了美食網(wǎng)站的熱門排行榜信息,演示了Beautiful Soup在爬蟲數(shù)據(jù)抓取和處理中的重要應(yīng)用。
Beautiful Soup作為一種解析庫,能夠方便地解析HTML/XML文本,提供多種標(biāo)簽選擇器并支持樹型結(jié)構(gòu)操作,可以快速定位和處理HTML/XML中需要的內(nèi)容,提高了爬蟲數(shù)據(jù)抓取和處理的效率。對于Python爬蟲初學(xué)者來說,掌握Beautiful Soup的使用是十分重要的。同時需要注意的是,在使用Beautiful Soup時需要遵循網(wǎng)絡(luò)道德規(guī)范,遵守網(wǎng)站的規(guī)定,避免對網(wǎng)站造成過度訪問和其他影響。
到此這篇關(guān)于如何用BeautifulSoup解析HTML內(nèi)容的文章就介紹到這了,更多相關(guān)BeautifulSoup解析HTML內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
下一篇:最后一頁
日本3月份出口鋼材299 7萬噸,同比減少4 7%
因知名體壇健將張繼科深陷“賭債風(fēng)波”,再次把景甜推上風(fēng)口浪尖,成為話題中心。一時間,大家都在心疼這個
觀點(diǎn)網(wǎng)盡管已更換大股東接近一年,但龍凈環(huán)保(如今已是ST龍凈)與前任大股東之間似乎并未完全撇清關(guān)系。根
新華財經(jīng)北京5月15日電近期,A股5家上市保險公司陸續(xù)披露了采用新保險合同會計準(zhǔn)則的2023年一季度業(yè)績報告
德班世乒賽下周開打,冠軍歸屬還看抽簽,陳夢,奧運(yùn)會,樊振東,亞洲紀(jì)錄,德班世乒賽
X 關(guān)閉
X 關(guān)閉