1. 程式人生 > >解決python爬蟲中文亂碼問題

解決python爬蟲中文亂碼問題

今天在用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)

儲存的資料詳情:
在這裡插入圖片描述