Python實(shí)現(xiàn)解析Html的方法與對(duì)比
在最近需要的需求中,需要 python 獲取網(wǎng)頁內(nèi)容,并從html中獲取到想要的內(nèi)容。這里記錄一下兩個(gè)比較常用的python庫對(duì)html的解析。
1. BeautifulSoup
它是一個(gè)非常流行的python腳本庫,用于解析HTML和XML文檔。如果你對(duì) java 很熟悉,那么就會(huì)容易想到j(luò)ava中也存在一個(gè)類似的java庫,叫Jsoup,名稱相似,效果也差不多。BeautifulSoup提供了簡(jiǎn)單易用的API,可以通過標(biāo)簽名、屬性、CSS選擇器等各種方式查找和提取HTML元素.
安裝
pip install beautifulsoup4
實(shí)例代碼:
from bs4 import BeautifulSoup
import requests
# 發(fā)送請(qǐng)求獲取到 html 內(nèi)容
response = requests.get("https://www.example.com")
html_content = response.text
# 創(chuàng)建 BeautifulSoup 對(duì)象
soup = BeautifulSoup(html,'html.parser')
# 創(chuàng)建 CSS 選擇器查找元素
elements = soup.select(".class-name")
for element in elements:
print(element.text)比如我現(xiàn)在想獲取新浪新聞的列表:

對(duì) html 進(jìn)行分析,我們可以發(fā)現(xiàn) class name:

那么我們可以直接填入代碼:
def try_to_get_world_news() :
response = requests.get("https://news.sina.com.cn/world/")
response.encoding = "utf-8"
html_data = response.text
# 創(chuàng)建 BeautifulSoup 對(duì)象
soup = BeautifulSoup(html_data, "html.parser")
# 通過css選擇器cha查找元素
elements = soup.select(".news-item")
for element in elements:
if element is not None:
a_links = element.find_all('a')
if a_links is not None and len(a_links) > 0 :
a_link = a_links[0]
a_text = a_link.text.strip()
a_href = a_link.get('href')
print("文本:" + a_text + ",鏈接:" + a_href)2. lxml
另外一個(gè)強(qiáng)大的python庫,也是用來處理 HTML 和 XML 文檔。當(dāng)然,它提供了XPath和CSS選擇器等功能,也可以很方面的定位和提取HTML庫。
安裝
pip install lxml
?當(dāng)然你還可能需要安裝一下 cssselect 這個(gè)庫
pip install cssselect
代碼實(shí)例
from lxml import html
import requests
import cssselect
# 創(chuàng)建請(qǐng)求對(duì)象,獲取請(qǐng)求內(nèi)容
response = requests.get("https://www.example.com")
html_content = response.text
# 創(chuàng)建 lxml 的 HTML 對(duì)象
tree = html.fromstring(html_content)
# 通過 css 選擇器查找
elements = tree.cssselect(".class-name")
for element in elements:
print(element.text)
demo:
同樣也是上面的例子,直接貼代碼:
response = requests.get("https://news.sina.com.cn/world/")
response.encoding = "utf-8"
html_data = response.text
tree = html.fromstring(html_data)
elements = tree.cssselect(".news-item")
for element in elements:
print(element)直接看結(jié)果

3. BeautifulSoup 和 lxml 優(yōu)缺點(diǎn)
BeautifulSoup和lxml都是Python中廣泛使用的HTML和XML解析庫,它們各自有其優(yōu)勢(shì)和特點(diǎn)。以下是BeautifulSoup和lxml的主要區(qū)別和優(yōu)勢(shì):
BeautifulSoup的優(yōu)勢(shì):
- 簡(jiǎn)單易用:BeautifulSoup提供了一個(gè)簡(jiǎn)單而直觀的API,使得解析HTML和XML文檔變得非常容易。它的語法簡(jiǎn)潔明了,即使是初學(xué)者也可以快速上手。
- 強(qiáng)大的解析能力:BeautifulSoup可以處理不規(guī)范的HTML和XML文檔,即使文檔中存在錯(cuò)誤或不完整的標(biāo)簽,它仍然能夠正確解析。
- 支持多種解析器:BeautifulSoup支持多種底層解析器,如lxml、html.parser和html5lib等。你可以根據(jù)需要選擇合適的解析器來提高解析性能或處理特定的文檔。
- 靈活的導(dǎo)航和搜索:BeautifulSoup提供了多種方法來導(dǎo)航和搜索文檔樹,如通過標(biāo)簽名、屬性、CSS選擇器等。它還支持使用正則表達(dá)式進(jìn)行搜索和匹配。
- 對(duì)Python開發(fā)者友好:BeautifulSoup是一個(gè)純Python庫,它與Python的數(shù)據(jù)結(jié)構(gòu)和編程風(fēng)格緊密集成。對(duì)于Python開發(fā)者來說,使用BeautifulSoup更加自然和便捷。
lxml的優(yōu)勢(shì):
- 高性能:lxml是一個(gè)高性能的HTML和XML解析庫,它使用C語言編寫的libxml2和libxslt庫作為底層引擎,因此解析速度非???。
- 支持XPath:lxml內(nèi)置了對(duì)XPath的支持,XPath是一種強(qiáng)大的語言,用于在XML和HTML文檔中進(jìn)行導(dǎo)航和查詢。使用XPath可以方便地定位和提取所需的元素。
- 支持CSS選擇器:lxml同樣支持使用CSS選擇器來查找和提取元素,這對(duì)于Web開發(fā)者來說非常熟悉和便捷。
- 支持XML和HTML的轉(zhuǎn)換:lxml可以將HTML文檔轉(zhuǎn)換為well-formed的XML文檔,也可以將XML文檔轉(zhuǎn)換為HTML文檔,這在某些情況下非常有用。
- 與其他庫的集成:lxml可以與其他Python庫很好地集成,如pandas、NumPy等,可以方便地進(jìn)行數(shù)據(jù)處理和分析。
區(qū)別:
解析速度:lxml的解析速度通常比BeautifulSoup更快,特別是在處理大型文檔時(shí)。如果性能是主要考慮因素,lxml可能是更好的選擇;
易用性:BeautifulSoup的API更加簡(jiǎn)單和直觀,對(duì)于初學(xué)者來說更容易上手。而lxml的API相對(duì)更加底層和復(fù)雜,需要一定的學(xué)習(xí)成本。
文檔支持:BeautifulSoup對(duì)于處理不規(guī)范的HTML文檔更加寬容,而lxml更傾向于處理well-formed的XML文檔。
依賴項(xiàng):BeautifulSoup是一個(gè)純Python庫,沒有外部依賴。而lxml依賴于C語言編寫的libxml2和libxslt庫,需要單獨(dú)安裝。
當(dāng)然,我們的選擇就是看自己的需求和偏好了。如果你是性能要求高,追求XPath和其它庫的繼承,lxml將會(huì)是一個(gè)比較好的選擇;當(dāng)然,就像我,比較重視簡(jiǎn)單易用,而且面對(duì)的HTML并不是特別的規(guī)范,我就會(huì)選擇 BeautifulSoup。
以上就是Python實(shí)現(xiàn)解析Html的方法與對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Python解析Html的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python分聃?之?dāng)?shù)字雨加入潘周聃運(yùn)動(dòng)曲線的詳細(xì)過程
相信各位同學(xué)最近一定被潘周聃刷屏和洗腦了,互聯(lián)網(wǎng)上也出現(xiàn)了這種各樣的模仿者,下面通過本文給大家分享Python分聃之?dāng)?shù)字雨加入潘周聃運(yùn)動(dòng)曲線,需要的朋友可以參考下2022-05-05
Python繪制數(shù)據(jù)圖表的超詳細(xì)教程
畫一個(gè)吸引人注意的圖表相當(dāng)重要,當(dāng)你探索一個(gè)數(shù)據(jù)集,需要畫圖表,圖表看起來令人愉悅是件很高興的事,下面這篇文章主要給大家介紹了關(guān)于Python繪制數(shù)據(jù)圖表的超詳細(xì)教程,需要的朋友可以參考下2022-11-11
在Python的Django框架中調(diào)用方法和處理無效變量
這篇文章主要介紹了在Python的Django框架中調(diào)用方法和處理無效變量的方法,是Django編程中的基礎(chǔ)操作,需要的朋友可以參考下2015-07-07
python實(shí)現(xiàn)抓取網(wǎng)頁數(shù)據(jù)并生成excel的實(shí)例
數(shù)據(jù)抓取與Excel生成流程:使用requests獲取網(wǎng)頁內(nèi)容,BeautifulSoup或lxml解析,Pandas整理為DataFrame,最后保存為Excel,動(dòng)態(tài)內(nèi)容需用Selenium2025-06-06
PyTorch基于Transformer架構(gòu)的完整文本生成實(shí)現(xiàn)方案
PyTorch文本生成代碼模板與解析 本文提供了一個(gè)基于Transformer架構(gòu)的完整文本生成實(shí)現(xiàn)方案,包含以下核心內(nèi)容: 代碼架構(gòu): 完整實(shí)現(xiàn)從數(shù)據(jù)預(yù)處理到模型訓(xùn)練的端到端流程 包含Transformer核心組件,需要的朋友可以參考下2026-04-04
關(guān)于Python網(wǎng)絡(luò)爬蟲requests庫的介紹
這篇文章主要介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲requests庫,而很多時(shí)候這些數(shù)據(jù)存儲(chǔ)在網(wǎng)頁中,手動(dòng)下載需要花費(fèi)的時(shí)間太長(zhǎng),這時(shí)候我們就需要網(wǎng)絡(luò)爬蟲幫助我們自動(dòng)爬取這些數(shù)據(jù),需要的朋友可以參考下2023-04-04
從入門到避坑詳解Pyinstaller打包Python程序的詳細(xì)指南
本文將通過3大核心模塊(基礎(chǔ)操作→常見問題→解決方案)詳細(xì)解析PyInstaller打包Python程序的詳細(xì)過程,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-08-08

