欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python抓取網(wǎng)頁時字符集轉(zhuǎn)換問題處理方案分享

 更新時間:2014年06月19日 09:45:07   投稿:hebedich  
python學習過程中發(fā)現(xiàn)英文不好學起來挺困難的,其中小弟就遇到一個十分蛋疼的問題,百度了半天就沒找到解決辦法~囧~摸索了半天自己解決了,記錄下來與君共勉。

問題提出:

    有時候我們采集網(wǎng)頁,處理完畢后將字符串保存到文件或者寫入數(shù)據(jù)庫,這時候需要制定字符串的編碼,如果采集網(wǎng)頁的編碼是gb2312,而我們的數(shù)據(jù)庫是utf-8的,這樣不做任何處理直接插入數(shù)據(jù)庫可能會亂碼(沒測試過,不知道數(shù)據(jù)庫會不會自動轉(zhuǎn)碼),我們需要手動將gb2312轉(zhuǎn)換成utf-8。

首先我們知道,python里的字符默認是ascii碼,英文當然沒問題啦,碰到中文的時候立馬給跪。

不知道你還記不記得,python里打印中文漢字的時候需要在字符串前面加 u:

print u"來搞基嗎?"

這樣子中文才能顯示,這里面的u的作用就是將后面的字符串轉(zhuǎn)換為unicode碼,這樣中文才能得到正確的顯示。
這里與之相關(guān)的有一個unicode()函數(shù),用法如下

str="來搞基"
str=unicode(str,"utf-8")
print str

與u的區(qū)別是,這里用unicode將str轉(zhuǎn)換為unicode編碼,需要正確指定第二個參數(shù),這里的utf-8是我test.py腳本自身的文件字符集,默認的可能是ansi。
unicode這是一個關(guān)鍵,下面繼續(xù)

我們開始抓取百度首頁,注意,游客訪問百度首頁,查看網(wǎng)頁源代碼,它的charset=gb2312。

import urllib2
def main():
  f=urllib2.urlopen("http://www.baidu.com")
  str=f.read()
  str=unicode(str,"gb2312")
  fp=open("baidu.html","w")
  fp.write(str.encode("utf-8"))
  fp.close()

if __name__ == '__main__' :
  main()

解釋:
我們首先用urllib2.urlopen()方法將百度首頁抓取到,f是句柄 ,用str=f.read()將所有源代碼讀入str中

搞清楚,str里面就是我們抓取的html源代碼,由于網(wǎng)頁默認的字符集是gb2312,所以如果我們直接保存到文件中,文件編碼將是ansi。

對于大部分人來說,其實這就足夠了,但是有時候我就想把gb2312轉(zhuǎn)換成utf-8的該怎么辦呢?

首先:
    str=unicode(str,"gb2312") #這里的gb2312就是str的實際字符集,我們現(xiàn)在將其轉(zhuǎn)換成unicode

然后:
    str=str.encode("utf-8") #將unicode的字符串重新編碼成utf-8

最后:

    將str寫入到文件中,打開文件看一下編碼屬性,發(fā)現(xiàn)是utf-8的了,把<meta charset="gb2312"改成<meta charset="utf-8" ,就是一個utf-8的網(wǎng)頁了。做了這么多其實就完成了一個gb2312->utf-8的轉(zhuǎn)碼。


總結(jié):

    我們回顧一下,如果需要將字符串按照指定的字符集保存,有以下幾個步驟:

    1:用unicode(str,"原來的編碼")將str解碼成unicode字符串

    2:將unicode字符串str 使用 str.encode("指定的字符集") 轉(zhuǎn)換成你指定的字符集

    3:將str保存文件,或者寫入數(shù)據(jù)庫等操作,當然,編碼你已經(jīng)指定了,不是嗎?

相關(guān)文章

  • python 消除 futureWarning問題的解決

    python 消除 futureWarning問題的解決

    今天小編就為大家分享一篇python 消除 futureWarning問題的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • easy_install python包安裝管理工具介紹

    easy_install python包安裝管理工具介紹

    在python里要實現(xiàn)像ruby的gem遠程包自動安裝和卸載的工具就是easy_install
    2013-02-02
  • 深入分析python中整型不會溢出問題

    深入分析python中整型不會溢出問題

    本文給大家通過實例和原理深入分析了python中整型不會溢出的相關(guān)知識點,有興趣的朋友可以跟著學習下。
    2018-06-06
  • Pandas中resample方法詳解

    Pandas中resample方法詳解

    這篇文章主要介紹了Pandas中resample方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python 數(shù)據(jù)加密代碼

    python 數(shù)據(jù)加密代碼

    使用Python來做數(shù)據(jù)加密同樣簡單,可以使用hashlib或者hmac模塊來做數(shù)據(jù)加密
    2008-12-12
  • Python常用模塊之threading和Thread模塊及線程通信

    Python常用模塊之threading和Thread模塊及線程通信

    這篇文章主要介紹了Python常用模塊之threading和Thread模塊及線程通信,文章為圍繞主題的相關(guān)內(nèi)容展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友看可以參考一下方法
    2022-06-06
  • python輕松查到刪除自己的微信好友

    python輕松查到刪除自己的微信好友

    這篇文章主要介紹了python腳本快速查看自己被多少微信好友刪除的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 基于Python實現(xiàn)自動掃雷詳解

    基于Python實現(xiàn)自動掃雷詳解

    這篇文章主要介紹了如何利用Python+OpenCV實現(xiàn)了自動掃雷,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,需要的可以參考一下
    2022-01-01
  • 詳解pygame中Rect對象

    詳解pygame中Rect對象

    Rect是pygame中的一個創(chuàng)建矩形的對象,它包含一些屬性主要是兩塊:坐標和長寬,Pygame?通過?Rect?對象存儲和操作矩形區(qū)域,這篇文章主要介紹了pygame中Rect對象,需要的朋友可以參考下
    2022-07-07
  • 詳解如何使用Pandas刪除DataFrame中的非數(shù)字類型數(shù)據(jù)

    詳解如何使用Pandas刪除DataFrame中的非數(shù)字類型數(shù)據(jù)

    在數(shù)據(jù)處理和分析過程中,經(jīng)常會遇到需要清洗數(shù)據(jù)的情況,本文將詳細介紹如何使用Pandas刪除DataFrame中的非數(shù)字類型數(shù)據(jù),感興趣的小伙伴可以了解下
    2024-03-03

最新評論