最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Python爬取網(wǎng)頁的編碼處理

 更新時間:2016年11月04日 10:18:41   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談Python爬取網(wǎng)頁的編碼處理。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

背景

中秋的時候,一個朋友給我發(fā)了一封郵件,說他在爬鏈家的時候,發(fā)現(xiàn)網(wǎng)頁返回的代碼都是亂碼,讓我?guī)退麉⒅\參謀(中秋加班,真是敬業(yè)= =!),其實這個問題我很早就遇到過,之前在爬小說的時候稍微看了一下,不過沒當(dāng)回事,其實這個問題就是對編碼的理解不到位導(dǎo)致的。

問題

很普通的一個爬蟲代碼,代碼是這樣的:

# ecoding=utf-8
import re
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf8')

url = 'http://jb51.net/ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/'
res = requests.get(url)
print res.text

目的其實很簡單,就是爬一下鏈家的內(nèi)容,但是這樣執(zhí)行之后,返回的結(jié)果,所有涉及到中文的內(nèi)容,全部會變成亂碼,比如這樣

<script type="text/template" id="newAddHouseTpl">
 <div class="newAddHouse">
  自从您上次浏览(<%=time%>ï¼‰ä¹‹åŽï¼Œè¯¥æœç´¢æ¡ä»¶ä¸‹æ–°å¢žåŠ äº†<%=count%>套房源
  <a href="<%=url%>" class="LOGNEWERSHOUFANGSHOW" <%=logText%>><%=linkText%></a>
  <span class="newHouseRightClose">x</span>
 </div>
</script>

這樣的數(shù)據(jù)拿來可以說毫無作用。

問題分析

這里的問題很明顯了,就是文字的編碼不正確,導(dǎo)致了亂碼。

查看網(wǎng)頁的編碼

從爬取的目標網(wǎng)頁的頭來看,網(wǎng)頁是用utf-8來編碼的。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

所以,最終的編碼,我們肯定也要用utf-8來處理,也就是說,最終的文本處理,要用utf-8來解碼,也就是:decode('utf-8')

文本的編碼解碼

Python的編碼解碼的過程是這樣的,源文件 ===》 encode(編碼方式) ===》decode(解碼方式),在很大的程度上,不推薦使用

import sys
reload(sys)
sys.setdefaultencoding('utf8')

這種方式來硬處理文字編碼。不過在某些時候不影響的情況下,偷偷懶也不是什么大問題,不過比較建議的就是獲取源文件之后,使用encode和decode的方式來處理文本。

回到問題

現(xiàn)在問題最大的是源文件的編碼方式,我們正常使用requests的時候,它會自動猜源文件的編碼方式,然后轉(zhuǎn)碼成Unicode的編碼,但是,畢竟是程序,是有可能猜錯的,所以如果猜錯了,我們就需要手工來指定編碼方式。官方文檔的描述如下:

When you make a request, Requests makes educated guesses about the encoding of the response based on the HTTP headers. The text encoding guessed by Requests is used when you access r.text. You can find out what encoding Requests is using, and change it, using the r.encoding property.

所以我們需要查看requests返回的編碼方式到底是什么?

# ecoding=utf-8
import re
import requests
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf8')

url = 'http://jb51.net/ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/'

res = requests.get(url)
print res.encoding

打印的結(jié)果如下:

ISO-8859-1

也就是說,源文件使用的是ISO-8859-1來編碼。百度一下ISO-8859-1,結(jié)果如下:

ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字符。

問題解決

發(fā)現(xiàn)了這個東東,問題就很好解決了,只要指定一下編碼,就能正確的打出中文了。代碼如下:

# ecoding=utf-8
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf8')

url = 'http://jb51.net/ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/'

res = requests.get(url)
res.encoding = ('utf8')

print res.text

打印的結(jié)果就很明顯,中文都正確的顯示出來了。

另一種方式是在源文件上做解碼和編碼,代碼如下:

# ecoding=utf-8
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf8')

url = 'http://jb51.net/ershoufang/rs%E6%8B%9B%E5%95%86%E6%9E%9C%E5%B2%AD/'

res = requests.get(url)
# res.encoding = ('utf8')

print res.text.encode('ISO-8859-1').decode('utf-8')

另:ISO-8859-1也叫做latin1,使用latin1做解碼結(jié)果也是正常的。

關(guān)于字符的編碼,很多東西可以說,想了解的朋友可以參考以下大神的資料。

•《The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)》

以上這篇淺談Python爬取網(wǎng)頁的編碼處理就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例

    pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例

    今天小編就為大家分享一篇pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 示例分享---邏輯推理編程解決八皇后

    python 示例分享---邏輯推理編程解決八皇后

    八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。
    2014-07-07
  • pandas創(chuàng)建DataFrame的7種方法小結(jié)

    pandas創(chuàng)建DataFrame的7種方法小結(jié)

    這篇文章主要介紹了pandas創(chuàng)建DataFrame的7種方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python通過pil將圖片轉(zhuǎn)換成黑白效果的方法

    python通過pil將圖片轉(zhuǎn)換成黑白效果的方法

    這篇文章主要介紹了python通過pil將圖片轉(zhuǎn)換成黑白效果的方法,實例分析了Python中pil庫的使用技巧,需要的朋友可以參考下
    2015-03-03
  • 實例解析Python中的__new__特殊方法

    實例解析Python中的__new__特殊方法

    __new__方法在Python中用于被創(chuàng)建類實例,接下來我們以實例解析Python中的__new__特殊方法,注意一下__new__與__init__方法的區(qū)別
    2016-06-06
  • Django關(guān)于admin的使用技巧和知識點

    Django關(guān)于admin的使用技巧和知識點

    在本篇文章里小編給大家整理的是關(guān)于Django的admin簡單使用的相關(guān)知識點內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)下。
    2020-02-02
  • python爬蟲中采集中遇到的問題整理

    python爬蟲中采集中遇到的問題整理

    在本篇文章里小編給大家整理了關(guān)于python爬蟲中采集中遇到的問題整理內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-11-11
  • Python re.sub 反向引用的實現(xiàn)

    Python re.sub 反向引用的實現(xiàn)

    反向引用指的是在指定替換結(jié)果的過程中,可以引用原始字符串中的匹配到內(nèi)容,本文主要介紹了反向引用的設(shè)置方法,感興趣的可以了解一下
    2021-07-07
  • 基于pycharm 項目和項目文件命名規(guī)則的介紹

    基于pycharm 項目和項目文件命名規(guī)則的介紹

    這篇文章主要介紹了基于pycharm 項目和項目文件命名規(guī)則的介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • python如何實現(xiàn)不用裝飾器實現(xiàn)登陸器小程序

    python如何實現(xiàn)不用裝飾器實現(xiàn)登陸器小程序

    這篇文章主要介紹了python如何實現(xiàn)不用裝飾器實現(xiàn)登陸器小程序,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

广饶县| 芜湖县| 菏泽市| 四子王旗| 新竹市| 齐齐哈尔市| 南安市| 米泉市| 什邡市| 依兰县| 中牟县| 班玛县| 广德县| 昌吉市| 宜春市| 银川市| 深州市| 保康县| 泽普县| 桐城市| 曲阜市| 休宁县| 永兴县| 朝阳区| 宜州市| 嘉义市| 伊宁县| 加查县| 宝兴县| 琼中| 尼勒克县| 宁武县| 连南| 独山县| 岑溪市| 会昌县| 义马市| 莱西市| 定州市| 武城县| 新乐市|