Python爬蟲XPath解析出亂碼的問題及解決
Python爬蟲XPath解析出亂碼
請求后加上編碼
resp = requests.get(url, headers=headers) resp.encoding = 'GBK'
Python XPath解析html出現(xiàn)â??解決方法 html出現(xiàn){;
爬網(wǎng)頁又遇到一個坑,老是出現(xiàn)a亂碼,查看html出現(xiàn)的是&#數(shù)字;這樣的。
網(wǎng)上相關(guān)的“Python字符中出現(xiàn)&#的解決辦法”又沒有很好的解決,自己繼續(xù)沖浪,費(fèi)了一番功夫解決了。
這算是又加深了一下我對這些iso、Unicode編碼的理解。故分享。
問題
用Python的lxml解析html時,調(diào)用text()輸出出來的結(jié)果帶有a這樣的亂碼:
網(wǎng)頁原頁面展示:
爬取代碼:
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)
原因
不用說自然是編碼的問題。下面教大家排查和解決。
排查與解決
首先查看返回的響應(yīng)是如何編碼的:
response = requests.request("GET", url, proxies=proxy) # 得到響應(yīng)之后,先檢查一下它的編碼方式 print(response.encoding)
結(jié)果如下:
然后根據(jù)這個編碼的方式再來解碼:
html = etree.HTML(response.text) description = html.xpath('//div[@class="xxx"]/div/div//text()') for desc in description: # print(desc) # 根據(jù)上面的結(jié)果,用iso88591來編碼,再解碼為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流傳下來的HTMLParser的,還有用python3的html包的,效果都不好。
不過也有改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)
也能成功解析。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python設(shè)計模式之模板方法模式實(shí)例詳解
這篇文章主要介紹了Python設(shè)計模式之模板方法模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了模板方法模式的概念、原理及Python定義、使用模板方法模式相關(guān)操作技巧,需要的朋友可以參考下2019-01-01pyhton列表轉(zhuǎn)換為數(shù)組的實(shí)例
下面小編就為大家分享一篇pyhton列表轉(zhuǎn)換為數(shù)組的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Pandas數(shù)據(jù)處理庫畫圖與文件讀取使用示例
這篇文章主要為大家介紹了Pandas數(shù)據(jù)處理庫畫圖與文件讀取使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Python隊列RabbitMQ 使用方法實(shí)例記錄
這篇文章主要介紹了Python隊列RabbitMQ 使用方法,結(jié)合實(shí)例形式分析了Python隊列RabbitMQ創(chuàng)建隊列發(fā)送消息與創(chuàng)建消費(fèi)者消費(fèi)信息相關(guān)操作技巧,需要的朋友可以參考下2019-08-08python 用遞歸實(shí)現(xiàn)通用爬蟲解析器
這篇文章主要介紹了python 用遞歸實(shí)現(xiàn)通用爬蟲解析器的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04