2016-08-21 62 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作为默认编码。他们都没有工作。 –