解決python爬蟲中文亂碼問題
阿新 • • 發佈:2018-12-31
今天在用python爬取網頁資料時中文顯示亂碼,最終發現是目標網頁編碼與python預設編碼‘utf-8’不一致導致的。下面把解決方法與大家分享。
step1:檢視目標網頁編碼方式
在各種瀏覽器開啟的任意頁面上使用F12功能鍵,即可使用開發者工具,在視窗console標籤下,鍵入“document.charset” 即可檢視網頁的編碼方式。如網頁連結: http://www.tianqihoubao.com/aqi/lanzhou-201812.html的編碼為“GBK”。
step2:對目標網頁轉碼
url="http://www.tianqihoubao.com/aqi/lanzhou-201812.html"
try:
html=urlopen(url)
except HTTPError as e:
print (e)
else:
#目標網頁編碼為'GBK',python預設編碼為'utf-8',為解決中文亂碼問題,對目標網頁進行解碼再編碼
bsobj=BeautifulSoup(html.read().decode('GBK').encode('utf-8') )
step3:爬取資料並儲存
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import urllib.parse
import pandas as pd
url="http://www.tianqihoubao.com/aqi/lanzhou-201812.html"
try:
html=urlopen(url)
except HTTPError as e:
print (e)
else:
#目標網頁編碼為'GBK',python預設編碼為'utf-8',為解決中文亂碼問題,先對目標網頁進行解碼再編碼
bsobj=BeautifulSoup(html.read().decode('GBK').encode('utf-8') )
#獲取標籤為tr的資料
data= bsobj.findAll('tr')
con=[]
#取出表頭
for i in data[0:1]:
title=i.get_text().strip().split("\n\n")
print (title)
#取表格中的內容
for i in data[1:]:
contents=i.get_text()
con.append(contents.replace(" ","").replace("\n\r","").replace("\r\n","").strip().split("\n"))
#將資料放到DataFrame中並寫入csv檔案儲存
air_data=pd.DataFrame(con,columns=title)
print (air_data)
air_data.to_csv('air.csv',index=None)
儲存的資料詳情: