一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Python解決抓取內容亂碼問題(decode和encode解碼)

詳解Python解決抓取內容亂碼問題(decode和encode解碼)

2021-06-10 00:13淺然_ Python

這篇文章主要介紹了Python解決抓取內容亂碼問題(decode和encode解碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、亂碼問題描述

經常在爬蟲或者一些操作的時候,經常會出現中文亂碼等問題,如下

詳解Python解決抓取內容亂碼問題(decode和encode解碼)

原因是源網頁編碼和爬取下來后的編碼格式不一致

 二、利用encode與decode解決亂碼問題

字符串在python內部的表示是unicode編碼,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode(‘gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。

encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode(‘utf-8'),表示將unicode編碼的字符串str2轉換成utf-8編碼。

decode中寫的就是想抓取的網頁的編碼,encode即自己想設置的編碼

代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2
 
request=urllib2.request(r'http://nhxy.zjxu.edu.cn/')
res=urllib2.urlopen(request).read()
res = res.decode('gb2312').encode('utf-8')//解決亂碼
wfile=open(r'./1.html',r'wb')
wfile.write(res)
wfile.close()
print res

或者

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2
 
request=urllib2.request(r'http://nhxy.zjxu.edu.cn/')
res=urllib2.urlopen(request).read()
res=res.decode('gb2312')
res=res.encode('utf-8')
wfile=open(r'./1.html',r'wb')
wfile.write(res)
wfile.close()
print res

但是還要注意:
如果一個字符串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷

isinstance(s, unicode)#用來判斷是否為unicode

用非unicode編碼形式的str來encode會報錯

所以最終可靠代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2
 
request=urllib2.request(r'http://nhxy.zjxu.edu.cn/')
res=urllib2.urlopen(request).read()
 
if isinstance(res, unicode):
 res=res.encode('utf-8')
else:
 res=res.decode('gb2312').encode('utf-8')
 
wfile=open(r'./1.html',r'wb')
wfile.write(res)
wfile.close()
print res

詳解Python解決抓取內容亂碼問題(decode和encode解碼)

三、如何找到需要抓取的目標網頁的編碼格式

1、查看網頁源代碼

詳解Python解決抓取內容亂碼問題(decode和encode解碼)

如果源代碼中沒有charset編碼格式顯示可以用下面的方法

2、檢查元素,查看response headers

詳解Python解決抓取內容亂碼問題(decode和encode解碼)

以上所述是小編給大家介紹的python解決抓取內容亂碼問題(decode和encode解碼)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://blog.csdn.net/w_linux/article/details/78370218

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91精品区 | 国产午夜久久精品 | 国产91页 | 久久aa毛片免费播放嗯啊 | 色就色欧美综合偷拍区a | 99av麻豆| 色天天综合色天天看 | 美琪美腿白丝交小说 | 国产亚洲女在线线精品 | 日韩高清一区二区三区不卡 | jizz农村野外jizz农民 | 精品亚洲视频在线观看 | 男人搡女人视频免费看 | 国产欧美一区二区精品性色 | 久青草国产在线观看视频 | 国产在线观看一区 | 调教扩张宫颈女人惨叫 | 特级夫妻大片免费在线播放 | 免费毛片 | jizz 日本亚洲 | 国产欧美精品一区二区三区–老狼 | 91在线免费播放 | 99性视频| 亚洲欧美另类在线观看 | 无遮掩60分钟从头啪到尾 | 国产在线观看人成激情视频 | 日韩一区二区不卡 | 97热| 美女扒开腿让男人桶爽动态图片 | 国产一卡 | 国产精品永久免费视频 | 小柔的性放荡羞辱日记 | 97热在线 | 俄罗斯海滩厕所偷窥 | 拍拍叫痛的无挡视频免费 | 青青青国产手机在线播放 | 亚洲一区二区三区深夜天堂 | 日本色频| 娇小8一12xxxx第一次 | 日本在线你懂的 | 肥奶丰熟肥妇 |