2016-01-14 20 views
0

所以我試圖解析網站的使用Python HTML和有一個麻煩人物u011f是提供了以下錯誤:如何處理無效的unicode BeautifulSoup而不轉換爲utf-8?

Function call: soup = BeautifulSoup(response, "html.parser") 
       print (soup) 

Error: UnicodeEncodeError: 'charmap' codec can't encode character '\u011f' 

如果我這樣做,而不是和編碼成UTF-8,

soup = BeautifulSoup(response, "html.parser").encode('utf-8') 

它刪除錯誤,但我不能這樣做,因爲我稍後調用find函數,它必須在unicode中。如果我編碼成UTF-8後調用查找功能,我收到以下錯誤:

Function call: worksTable = soup.find('tbody', attrs={'id': 'some_id'}) 
Error: TypeError: find() takes no keyword arguments 

我已經花了這段代碼小時,不能在這裏找到適合我的情況下,任何的答案。任何幫助,將不勝感激。

+0

的可能的複製(http://stackoverflow.com/questions/ 34694858/beautifulsoup4-stripped-strings-giving-me-byte-objects) – styvane

回答

0

當你編碼的湯,它成爲string

的代碼

BeautifulSoup(response, "html.parser").encode('utf-8') 

下面一行將返回字符串對象,並因此將不支持這應一個BeautifulSoup對象上使用一個find(tagname, attrs={})方法調用。

我認爲你應該在做湯之前編碼響應文本以獲得更好的結果。

responseTxt = response.text.encode('UTF-8') 
soup = BeautifulSoup(responseTxt, 'html.parser') 
idv = soup.find('tbody', attrs={'id': 'some_id'}) 
print(idv.text) 
+0

感謝您的提示,但是我的回覆目前沒有編碼功能。我正在使用請求模塊。這是我的代碼: 會話= requests.Session() PARAMS = {} 響應= session.post( 'SOME_URL',數據=參數) 湯= BeautifulSoup(response.content 「html.parser」) 打印(湯) – Shruf

+0

好的,所以我嘗試使用response.text.encode('UTF-8),但它不會改變任何東西,併產生與response.content相同的響應。 無效字符被轉換爲'ğ',頂部http信息爲content =「text/html; charset = ISO-8859-1」(如果有幫助的話)。有沒有其他方法? – Shruf

+0

@Shruf你是否嘗試了可能重複的答案? – styvane

0

所以我發現它與我的桌面編解碼器的問題。相同的代碼在我的筆記本上運行良好。我對此很困惑,但會找到一種方法來管理。

0

您可以嘗試在find()而不是湯encode(),這裏有一個例子:[?BeautifulSoup4剝離\ _strings給我字節對象]

worksTable = soup.find('tbody', attrs={'id': 'some_id'}).text.encode('utf-8') 
相關問題