日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python抓取網頁時字符集轉換問題處理方案分享

系統 1766 0

問題提出:

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

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

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

            
print u"來搞基嗎?"
          

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

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

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

我們開始抓取百度首頁,注意,游客訪問百度首頁,查看網頁源代碼,它的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源代碼,由于網頁默認的字符集是gb2312,所以如果我們直接保存到文件中,文件編碼將是ansi。

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

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

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

最后:

??? 將str寫入到文件中,打開文件看一下編碼屬性,發現是utf-8的了,把 utf-8的轉碼。


總結:

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

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

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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 华坪县| 林州市| 扬中市| 河东区| 法库县| 集安市| 姜堰市| 陇南市| 共和县| 耒阳市| 常州市| 苗栗县| 日照市| 伊春市| 镇巴县| 宁波市| 江北区| 民和| 张家界市| 南涧| 项城市| 大理市| 台中县| 深泽县| 新密市| 吉隆县| 洛川县| 玉门市| 宁夏| 天峻县| 巴楚县| 同德县| 贡嘎县| 西吉县| 铜梁县| 铅山县| 嘉荫县| 毕节市| 通许县| 汉中市| 东山县|