Python信息抽取之亂碼解決辦法
就事論事,直說自己遇到的情況,和我不一樣的路過吧,一樣的就看看吧
信息抓取,用python,beautifulSoup,lxml,re,urllib2,urllib2去獲取想要抽取的頁面內容,然后使用lxml或者beautifulSoup進行解析,插入mysql 具體的內容,好了貌似很簡單很easy的樣子,可是里面的惡心之處就來了,第一,國內開發網站的人在指定網站編碼或者是保存網站源碼的時候并沒有考慮什么編碼,反正一句話,一個網站即使你用工具查看或者查看源碼頭信息查看到他們的源碼是utf-8,或者GBK之類的,也別信,哎,什么東西信了就遭殃了,即
以下給出一些流程:(具體各個庫不是我這里向說的哦)
import urllib2 import chardet html = urllib2.urlopen("某網站") print chardet.detect(html) #這里會輸出一個字典{'a':0.99999,'encoding':'utf-8'}
好,這整個html的編碼都知道,該插入以utf-8建立的mysql數據庫了吧,但是我就在插入的時候發生錯誤了,因為我使用lxml以后的字符串不是utf-8,而是Big5(繁體字編碼),還有各種未知編碼EUC-JP(日本語編碼),OK,我采取了unicode方法,先對這個字段進行解碼,在進行編碼
if chardet.detect(name)['encoding'] == 'GB2312': name = unicode(name,'GB2312','ignore').encode('utf-8','ignore') elif chardet.detect(name)['encoding'] == 'Big5': name = unicode(name,'Big5','ignore').encode('utf-8','ignore') elif chardet.detect(name)['encoding'] == 'ascii': name = unicode(name,'ascii','ignore').encode('utf-8','ignore') elif chardet.detect(name)['encoding'] == 'GBK': name = unicode(name,'GBK','ignore').encode('utf-8','ignore') elif chardet.detect(name)['encoding'] == 'EUC-JP': name = unicode(name,'EUC-JP','ignore').encode('utf-8','ignore') else: name = '未知'
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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