2016-08-21 78 views
0

如果我運行此代碼:的Python + BeautifulSoup:編碼錯誤

for link in soup.findAll('a'): 
    href = link.get('href') 
    href = str(href) 

,我發現了以下錯誤在最後一行

href = str(href) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2018' in position 68: ordinal not in range(128) 

當我嘗試了可變編碼,如圖所示如下:

for link in soup.findAll('a'): 
    href = link.get('href') 
    href = href.encode('utf-8') 
    href = str(href) 

我得到以下錯誤:

href = href.encode('utf-8') 
AttributeError: 'NoneType' object has no attribute 'encode' 

我看在這裏和其他地方多個職位,但他們沒有提供合適的解決方案。我對python相當陌生。請幫忙。

+0

您可以使用一個try/catch,打印已導致錯誤 – Maviles

回答

0

一旦有人面臨着這個問題,這裏是我如何解決它:

理想的情況下,對於編碼的問題,這應該已經工作:

href = href.encode('utf-8') 
href = str(href) 

但在網頁集我擦洗,有哪個沒有任何值存儲在href變了幾頁,導致一些NoneType回報。這是失敗的str(href)聲明。所以,我終於做到了這一點:

for link in soup.findAll('a'): 
    href = link.get('href') 
    if href is None: 
     href = "" 
    href = str(href.encode('utf-8')) 

如果hrefNoneType,最好將其分配到一個空字符串,以防止任何類型的具體問題進一步代碼。

我對u \ 2018和u \ 2019字符所作的觀察之一是,它們通常不會出現在鏈接本身中,而是出現在鏈接所附屬的屬性中。這通常是?attribute=後面的文字。所以,如果屬性是不是在你的擦洗重要的是,使用像一個語句下面可以解決所有的問題。

href = href.split("?")[0] 
0

在我的母語,我們有很多的「áçéàó」字,所以我經常發現自己處於類似的情況,而大部分的解碼/編碼提示沒有工作的所有道路。

找到我的出路在我的代碼使用開始時正在重置的SYS默認語言:

import sys 

reload(sys) 
sys.setdefaultencoding('latin-1') 

希望這也能與您的問題有所幫助。

+0

感謝你的價值......我已經試過這和UTF-8作爲默認編碼。他們都沒有工作。 –