python抓取并保存html頁(yè)面時(shí)亂碼問(wèn)題的解決方法
本文實(shí)例講述了python抓取并保存html頁(yè)面時(shí)亂碼問(wèn)題的解決方法。分享給大家供大家參考,具體如下:
在用Python抓取html頁(yè)面并保存的時(shí)候,經(jīng)常出現(xiàn)抓取下來(lái)的網(wǎng)頁(yè)內(nèi)容是亂碼的問(wèn)題。出現(xiàn)該問(wèn)題的原因一方面是自己的代碼中編碼設(shè)置有問(wèn)題,另一方面是在編碼設(shè)置正確的情況下,網(wǎng)頁(yè)的實(shí)際編碼和標(biāo)示的編碼不符合造成的。html頁(yè)面標(biāo)示的編碼在這里:
這里提供一種簡(jiǎn)單的辦法解決:使用chardet判斷網(wǎng)頁(yè)的真實(shí)編碼,同時(shí)從url請(qǐng)求返回的info判斷標(biāo)示編碼。如果兩種編碼不同,則使用bs模塊擴(kuò)展為GB18030編碼;如果相同則直接寫(xiě)入文件(這里設(shè)置系統(tǒng)默認(rèn)編碼為utf-8)。
import urllib2
import sys
import bs4
import chardet
reload(sys)
sys.setdefaultencoding('utf-8')
def download(url):
htmlfile = open('test.html','w')
try:
result = urllib2.urlopen(url)
content = result.read()
info = result.info()
result.close()
except Exception,e:
print 'download error!!!'
print e
else:
if content != None:
charset1 = (chardet.detect(content))['encoding'] #real encoding type
charset2 = info.getparam('charset') #declared encoding type
print charset1,' ', charset2
# case1: charset is not None.
if charset1 != None and charset2 != None and charset1.lower() != charset2.lower():
newcont = bs4.BeautifulSoup(content, from_encoding='GB18030') #coding: GB18030
for cont in newcont:
htmlfile.write('%s\n'%cont)
# case2: either charset is None, or charset is the same.
else:
#print sys.getdefaultencoding()
htmlfile.write(content) #default coding: utf-8
htmlfile.close()
if __name__ == "__main__":
url = 'http://www.fzitv.net'
download(url)
得到的test.html文件打開(kāi)如下,可以看到使用的是UTF-8無(wú)BOM編碼格式存儲(chǔ)的,也就是我們?cè)O(shè)置的默認(rèn)編碼:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python編碼操作技巧總結(jié)》、《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python基于lxml模塊解析html獲取頁(yè)面內(nèi)所有葉子節(jié)點(diǎn)xpath路徑功能示例
- Python語(yǔ)言實(shí)現(xiàn)將圖片轉(zhuǎn)化為html頁(yè)面
- Python編寫(xiě)簡(jiǎn)單的HTML頁(yè)面合并腳本
- Python使用lxml模塊和Requests模塊抓取HTML頁(yè)面的教程
- Python使用urllib2模塊抓取HTML頁(yè)面資源的實(shí)例分享
- Python正則表達(dá)式匹配HTML頁(yè)面編碼
- 通過(guò)Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的html頁(yè)面
相關(guān)文章
python日期與時(shí)間戳的各種轉(zhuǎn)換示例
這篇文章主要介紹了python日期與時(shí)間戳的各種轉(zhuǎn)換示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python使用combinations實(shí)現(xiàn)排列組合的方法
今天小編就為大家分享一篇Python使用combinations實(shí)現(xiàn)排列組合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Python關(guān)于__name__屬性的含義和作用詳解
在本篇文章里小編給大家分享的是關(guān)于Python關(guān)于__name__屬性的含義和作用知識(shí)點(diǎn),需要的朋友們可以參考下。2020-02-02
python內(nèi)置HTTP Server如何實(shí)現(xiàn)及原理解析
這篇文章主要為大家介紹了python內(nèi)置HTTP Server如何實(shí)現(xiàn)及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
對(duì)Python之gzip文件讀寫(xiě)的方法詳解
今天小編就為大家分享一篇對(duì)Python之gzip文件讀寫(xiě)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Python實(shí)現(xiàn)計(jì)算兩個(gè)時(shí)間之間相差天數(shù)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算兩個(gè)時(shí)間之間相差天數(shù)的方法,涉及Python針對(duì)日期時(shí)間的相關(guān)運(yùn)算操作技巧,需要的朋友可以參考下2017-05-05
使用python將多個(gè)excel文件合并到同一個(gè)文件的方法
這篇文章主要介紹了使用python將多個(gè)excel文件合并到同一個(gè)文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python3 中把txt數(shù)據(jù)文件讀入到矩陣中的方法
下面小編就為大家分享一篇Python3 中把txt數(shù)據(jù)文件讀入到矩陣中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
詳解HttpRunner3的HTTP請(qǐng)是如何發(fā)出
這篇文章主要為大家介紹了HttpRunner3的HTTP請(qǐng)是如何發(fā)出詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

