Python爬蟲(chóng)XPath解析出亂碼的問(wèn)題及解決
Python爬蟲(chóng)XPath解析出亂碼
請(qǐng)求后加上編碼
resp = requests.get(url, headers=headers) resp.encoding = 'GBK'
Python XPath解析html出現(xiàn)â??解決方法 html出現(xiàn){;
爬網(wǎng)頁(yè)又遇到一個(gè)坑,老是出現(xiàn)a亂碼,查看html出現(xiàn)的是&#數(shù)字;這樣的。
網(wǎng)上相關(guān)的“Python字符中出現(xiàn)&#的解決辦法”又沒(méi)有很好的解決,自己繼續(xù)沖浪,費(fèi)了一番功夫解決了。
這算是又加深了一下我對(duì)這些iso、Unicode編碼的理解。故分享。
問(wèn)題
用Python的lxml解析html時(shí),調(diào)用text()輸出出來(lái)的結(jié)果帶有a這樣的亂碼:

網(wǎng)頁(yè)原頁(yè)面展示:

爬取代碼:
url = "xxx"
response = requests.request("GET", url)
html = etree.HTML(response.text)
# 直接調(diào)用text函數(shù)
description = html.xpath('//div[@class="xxx"]/div/div//text()')
# 直接打印
for desc in description:
print(desc)原因
不用說(shuō)自然是編碼的問(wèn)題。下面教大家排查和解決。
排查與解決
首先查看返回的響應(yīng)是如何編碼的:
response = requests.request("GET", url, proxies=proxy)
# 得到響應(yīng)之后,先檢查一下它的編碼方式
print(response.encoding)結(jié)果如下:

然后根據(jù)這個(gè)編碼的方式再來(lái)解碼:
html = etree.HTML(response.text)
description = html.xpath('//div[@class="xxx"]/div/div//text()')
for desc in description:
# print(desc)
# 根據(jù)上面的結(jié)果,用iso88591來(lái)編碼,再解碼為utf-8
print(desc.encode("ISO-8859-1").decode("utf-8"))結(jié)果如下:

完整代碼:
url = "xxx"
response = requests.request("GET", url)
print(response.encoding)
html = etree.HTML(response.text)
description = html.xpath('//div[@class="xxx"]/div/div//text()')
for desc in description:
print(desc.encode("ISO-8859-1").decode("utf-8"))
# print(desc)總結(jié)
網(wǎng)上有用python2流傳下來(lái)的HTMLParser的,還有用python3的html包的,效果都不好。
不過(guò)也有改response的編碼方式的,就是這樣:
url = "xxx"
response = requests.request("GET", url)
# html = etree.HTML(response.text)
html = etree.HTML(response.content) # 改用二進(jìn)制編碼
# 直接調(diào)用text函數(shù)
description = html.xpath('//div[@class="xxx"]/div/div//text()')
# 直接打印
for desc in description:
print(desc)也能成功解析。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python Pygame實(shí)戰(zhàn)之飛機(jī)大戰(zhàn)的實(shí)現(xiàn)
飛機(jī)大戰(zhàn)想必是很多人童年時(shí)期的經(jīng)典游戲,這篇文章主要給大家介紹了關(guān)于如何利用python中的Pygame模塊寫一個(gè)簡(jiǎn)單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)飛機(jī)大戰(zhàn)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
matplotlib實(shí)戰(zhàn)之餅圖繪制詳解
餅圖,或稱餅狀圖,是一個(gè)劃分為幾個(gè)扇形的圓形統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制餅圖,需要的小伙伴可以參考下2023-08-08
Python學(xué)習(xí)筆記之While循環(huán)用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之While循環(huán)用法,結(jié)合具體實(shí)例形式分析了while循環(huán)的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
深度學(xué)習(xí)小工程練習(xí)之tensorflow垃圾分類詳解
這篇文章主要介紹了練習(xí)深度學(xué)習(xí)的一個(gè)小工程,代碼簡(jiǎn)單明確,用來(lái)作為學(xué)習(xí)深度學(xué)習(xí)的練習(xí)很適合,對(duì)于有需要的朋友可以參考下,希望大家可以體驗(yàn)到深度學(xué)習(xí)帶來(lái)的收獲2021-04-04
Python使用Tkinter打造一個(gè)完整的桌面應(yīng)用
在Python生態(tài)中,Tkinter就像一把瑞士軍刀,它沒(méi)有花哨的特效,卻能快速搭建出實(shí)用的圖形界面,作為Python自帶的標(biāo)準(zhǔn)庫(kù),無(wú)需安裝即可使用,這種“開(kāi)箱即用”的特性讓它成為新手入門GUI開(kāi)發(fā)的首選,本文將通過(guò)構(gòu)建一個(gè)完整的記事本應(yīng)用,帶你領(lǐng)略Tkinter的實(shí)用魅力2025-06-06
pycharm日志總是彈出“無(wú)法運(yùn)行Git,未安裝Git”的問(wèn)題
這篇文章主要介紹了pycharm日志總是彈出“無(wú)法運(yùn)行Git,未安裝Git”的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python之從文件讀取數(shù)據(jù)到list的實(shí)例講解
下面小編就為大家分享一篇python之從文件讀取數(shù)據(jù)到list的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

