2015-01-07 24 views
1

我有一個代碼如何獲得UTF8編碼的HTML內容

# __author__ = 'Vahagn' 
# -*- coding: utf-8 -*- 
import BeautifulSoup 
import requests 
    req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html") 
    s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text 
    print(s2+'\n') 

我在哪裏普林S2,到控制檯或文件所著

Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ. 

但需要

Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных. 

請幫幫忙,我如何解決這個問題,因爲在這個文本之後(s2)寫入mysql。謝謝。

+0

你真的應該使用beautifulSoup4 –

+0

它正常工作對我來說,這是你的系統編碼這就是問題所在。你使用的是Python 2還是3? –

+0

我使用python 2.7 –

回答

1

你可能需要解碼:

s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).tex‌​t 


In [72]: s2 = BeautifulSoup(req.content).find('p',{'class':'text'}).text 
In [73]: s2 
Out[73]: 'Õèìè÷åñêèå ñâîéñòâà. Ìèíåðàëû. Ìåäíûå ñïëàâû. Ìàðêè ìåäíûõ ñïëàâîâ. Ìåäíî-öèíêîâûå ñïëàâû. Ëàòóíè. Îëîâÿííûå áðîíçû. Àëþìèíèåâûå áðîíçû. Êðåìíèñòûå áðîíçû. Áåðèëëèåâûå áðîíçû. Ìåäü â ïðîìûøëåííîñòè. Ìåäü â æèçíè ðàñòåíèé è æèâîòíûõ.' 

In [74]: s2 = BeautifulSoup(req.content.decode("windows-1251")).find('p',{'class':'text'}).text  
In [75]: s2 
Out[75]: 'Химические свойства. Минералы. Медные сплавы. Марки медных сплавов. Медно-цинковые сплавы. Латуни. Оловянные бронзы. Алюминиевые бронзы. Кремнистые бронзы. Бериллиевые бронзы. Медь в промышленности. Медь в жизни растений и животных.' 
0

查看HTML和響應標頭,Web服務器不會向您發送數據編碼。這意味着Python必須猜測。我認爲它會使用你的默認編碼(無論你的操作系統使用什麼)。

嘗試req.content轉換成unicode有不同的編碼,直到找到一個能產生正確的輸出:

content = unicode(req.content, encoding) 

嘗試utf-8iso-latin-1作爲編碼或俄國常用的一些編碼。

+0

s2 = unicode(s2,encoding ='utf-8') TypeError:不支持Unicode解碼 –

+0

似乎s2'已經是一種Unicode字符串了,但它可能是亂碼。嘗試's2 = s.encode('iso-8859-1')。decode('utf-8')'或者查看'requests'模塊,如果你可以覆蓋/指定內容的編碼。 –

0

嘗試在打印出來之前進行編碼。就像這樣:

import BeautifulSoup 
import requests 
    req = requests.get(u"http://knowledge.allbest.ru/chemistry/3c0a65635a3ad68b5c53b88421306c27.html") 
    s2 = BeautifulSoup.BeautifulSoup(req.content).find('p',{'class':'text'}).text 
    s2 = s2.encode('utf-8') 
    print(s2+'\n') 
+0

s2 = unicode(s2,encoding ='utf-8')TypeError:解碼Unicode不支持 –

+0

@VahagnVardanyan嘗試另一種方法。檢查我的更新。 –

+0

我嘗試這種方式 - UnicodeDecodeError:'ascii'編解碼器無法解碼位置0中的字節0xc3:序號不在範圍內(128) –