黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 1934 0

問(wèn)題提出:

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

首先我們知道,python里的字符默認(rèn)是ascii碼,英文當(dāng)然沒(méi)問(wèn)題啦,碰到中文的時(shí)候立馬給跪。

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

            
print u"來(lái)搞基嗎?"
          

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

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

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

我們開(kāi)始抓取百度首頁(yè),注意,游客訪問(wèn)百度首頁(yè),查看網(wǎng)頁(yè)源代碼,它的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()方法將百度首頁(yè)抓取到,f是句柄 ,用str=f.read()將所有源代碼讀入str中

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

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

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

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

最后:

??? 將str寫入到文件中,打開(kāi)文件看一下編碼屬性,發(fā)現(xiàn)是utf-8的了,把 utf-8的轉(zhuǎn)碼。


總結(jié):

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

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

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論