1. 程式人生 > >Python BeautifulSoup中文亂碼問題的2種解決方法

Python BeautifulSoup中文亂碼問題的2種解決方法

解決方法一:

使用python的BeautifulSoup來抓取網頁然後輸出網頁標題,但是輸出的總是亂碼,找了好久找到解決辦法,下面分享給大家
首先是程式碼

from bs4 import BeautifulSoup
import urllib2

url = 'http://www.jb51.net/'
page = urllib2.urlopen(url)

soup = BeautifulSoup(page,from_encoding="utf8")
print soup.original_encoding
print (soup.title).encode('gb18030')

file = open("title.txt","w")
file.write(str(soup.title))
file.close()

 

for link in soup.find_all('a'):
    print link['href']

在剛開始測試的時候發現,雖然輸出是亂碼的,但是寫在檔案裡面卻是正常的.然後在網上找了找解決辦法才發現
print一個物件的邏輯:內部是呼叫物件的__str__得到對應的字串的,此處對應的是soup的__str__ 而針對於soup本身,其實已經是Unicode編碼,所以可以通過指定__str__輸出時的編碼為GBK,以使得此處正確顯示非亂碼的中文
而對於cmd:(中文的系統中)編碼為GBK,所以只要重新編碼為gb18030就可以正常輸出了
就是下面這行程式碼
print (soup.title).encode('gb18030')

解決方法二:

BeautifulSoup在解析utf-8編碼的網頁時,如果不指定fromEncoding或者將fromEncoding指定為utf-8會出現中文亂碼的現象。

解決此問題的方法是將Beautifulsoup建構函式中的fromEncoding引數的值指定為:gb18030

import urllib2
from BeautifulSoup import BeautifulSoup  
 page = urllib2.urlopen('http://www.jb51.net/');
soup = BeautifulSoup(page,fromEncoding="gb18030")
print soup.originalEncoding
print soup.prettify() 


相關推薦

Python BeautifulSoup中文亂碼問題的2解決方法

解決方法一: 使用python的BeautifulSoup來抓取網頁然後輸出網頁標題,但是輸出的總是亂碼,找了好久找到解決辦法,下面分享給大家 首先是程式碼 from bs4 import BeautifulSoup import urllib2 url = 'htt

VScode中python中用run coder輸出結果中文亂碼的最終解決方法

我用vscode寫python用的是run code這個外掛,今天寫程式碼時發現print('中文') 在終端視窗是亂碼,找了很多原因,最後才發現是一個設定的問題: 用run code輸入是亂碼,用系統的cmd確是好的,這叫我知道肯定是哪裡設定出了問題: 解決方法有兩種:     1:在環

2017.6.17 jsp中 get請求的中文亂碼問題的解決方法

utf meta class enc 請求 服務 charset url編碼 uri 一般Tocant 的url編碼是iso-8859-1(查看tocat/conf/server.xml 中的Connector 節點沒有寫URIEncoding="xxxxxx") 如下:

mysql5.5-中文亂碼原因與解決方法

一、出現中文亂碼的原因 1.檢視字符集 mysql> show variables like ‘%char%’; ±-------------------------±-----------------------------------------

關於《JavaWeb開發實戰經典》中接收封裝表單的文字資料出現中文亂碼問題的解決方法

smartupload亂碼問題 今天在寫smartupload的demo時,在接收表單資料時出現了中文亂碼,從網上綜合了各種方法才得以解決。 1.smartupload.html中可見對form使用enctype進行表單封裝 <!DOCTYPE html&

對Java程式中的中文亂碼問題的解決方法

中文問題的來源 計算機最初的作業系統支援的編碼是單位元組的字元編碼,於是,在計算機中一切處理程式最初都是以單位元組編碼的英文為準進行處理。 隨著計算機的發展,為了適應世界其它民族的語言(當然包括我們的漢字),人們提出了UNICODE編碼,它採用雙位元組編碼,相容英文字元和其它民族的雙位元

WIN7部分程式中文亂碼的簡單解決方法

控制面板——區域和語言——設定——在彈出的視窗中將系統區域設定成“英語(英國)”,然後點選確定,重啟電腦。這裡需要提醒的是,重啟後可能會全是亂碼,因此我們需要牢記如何從桌面進入到這個介面,可以用筆記錄點選的位置和步驟 重啟完成後,我們按照上面記錄的再次來到區域和語言設定這一視窗,這次我們選擇“中

python字串替換的2有效方法

1是用字串本身的方法。 2用正則來替換字串 下面用個例子來實驗下: a = 'hello word' 我把a字串裡的word替換為python 1用字串本身的replace方法 a.replace('word','python') 輸出的結果是hello python

Get,Post請求中文亂碼問題有效解決方法

對於做Java WEB專案同學來說,中文亂碼問題是一個經常遇到而又非常頭痛的問題,而最容易出現亂碼的環節就是在瀏覽器向伺服器傳送請求的過程,至於出現亂碼的原因不是本文的關注的重點,想了解的朋友可以參考 本文主要介紹如何有效解決web請求中的亂碼問題,其實解決方法有很多種,不

JSP---EL表示式中文亂碼(Tomcat伺服器)解決方法

JSP和Servlet傳值時,使用EL表示式經常出現中文亂碼問題 解決方法如下: 1.找到apache-tomcat的資料夾所在處,例如E盤. 2.開啟E:\apache-tomcat-6.0.30\

eclipse插入資料到MySQL資料庫時,出現中文亂碼問題的解決方法

       中文亂碼 問題,一直讓人很煩,在百度上找了很多方法,都不行,後來,忽然想到一個方法,竟然沒有亂碼了,好了,進入正題;        首先,說明我的中文亂碼是出現在配置hibernate

Servlet中文亂碼問題及其解決方法

關於設定中文的亂碼問題 原因:response緩衝區的預設編碼是iso8859-1,此碼錶中沒有中文,可以通過response的setCharacterEncoding(String charset)

關於Get,Post請求中文亂碼問題有效解決方法

對於做Java WEB專案同學來說,中文亂碼問題是一個經常遇到而又非常頭痛的問題,而最容易出現亂碼的環節就是在瀏覽器向伺服器傳送請求的過程,至於出現亂碼的原因不是本文的關注的重點,想了解的朋友可以參考 本文主要介紹如何有效解決web請求中的亂碼問題,其實解決方法有很多種,

[Bat]UNC路徑不支持的2解決方法

alt 服務器 nbsp span inf dfs 堆棧 用戶 除了 UNC(Universal Naming Convention),\\servername\sharename,其中servername是服務器名。sharename是共享資源的名稱 1.使用push

ASP.net連線mysql資料庫中文亂碼問題的解決方法

1. 修改mysql的配置。到mysql server的安裝目錄下找到my.ini,修改[mysql]小節中的default-character-set為utf8[mysql] default-character-set=utf8 2. 修改mysql server的字符集如

IntelliJ IDEA 控制檯輸出中文亂碼問題的解決方法

首先,找到 IntelliJ IDEA 的安裝目錄,進入bin目錄下,定位到idea.vmoptions檔案,如下圖所示: 雙擊開啟idea.vmoptions檔案,如下圖所示: 然後,在其中追加-

Source Insight崩潰的2解決方法

現象:  Source Insight一直崩潰 原因分析:原因肯定的多樣的,往往只有每種方法都試了才知道,所以如果本文解決不了讀者的問題,還請不要踩我,這不公平。 解決方法: (1)刪除C:\User

python爬蟲中文亂碼解決方法

python爬蟲中文亂碼 前幾天用python來爬取全國行政區劃編碼的時候,遇到了中文亂碼的問題,折騰了一會兒,才解決。現特記錄一下,方便以後檢視。 我是用python的requests和bs4庫來實現爬蟲,這兩個庫的簡單用法可參照python爬取噹噹網的書籍資訊並儲存到csv檔案 亂碼未處理前部分程式碼

MFC用CStdioFile類讀取中文文字時亂碼問題的一解決方法

        在文章開始之前,先宣告一下,本人的程式設計環境為vs2010,MFC工程使用unicode字符集。         在MFC中,用CStdioFile類可以很方便地一行一行讀取檔案。 可是最近我在編寫MFC程式時,用CStdioFile讀取中文文字時,發現讀

pycharm輸出中文出現亂碼的幾解決方法以及讀取時打印出現亂碼解決

pycharm列印中文出現亂碼,有幾種情況 第一種: 對於這種情況,是普通的一種,你需要檢查開頭,是否加了 # -*- coding:utf-8 -*-還有import sys reload(sys) sys.setdefaultencoding('utf-8') 對於