2016-12-02 82 views
2

关于Python BeautifulSoup输出编码(使用Python 3.4.4):BeautifulSoup输出编码:如何结合soup.p.encode(“utf-8”)与soup.select('a')&.getText()

如何结合soup.p.encode(“utf-8”)与soup.select('a')& .getText()?

I.e.我可以做两个之一,但不知道如何做两个... - >我想使用soup.p.encode(“utf-8”),因为例如,在我的输出中,“Aloë”会另外转换为“alo?”。

但我也想使用汤对象(类型:)通过“soup.select('a')和”.getText()“来选择href对象。如果我做了soup.p.encode “utf-8”)首先这是不可能的,因为我得到“AttributeError:'字节'对象没有'select'属性。

但是,似乎一旦我将汤对象转换为一个列表,然后是一个字符串,那么获取UTF-8字符为时已晚?例如。 text = text.decode('utf-8')不起作用。我真的可以请一些建议!

FYI我的代码:

import requests, bs4 

res = requests.get(url) 
try: 
    res.raise_for_status() 
except Exception as exc: 
    print('There was a problem: %s' % (exc)) 

soup = bs4.BeautifulSoup(res.text,"html.parser", from_encoding="UTF-8") 
#soup = soup.encode("utf-8") 
#type: <class 'bs4.BeautifulSoup'> 
#print(soup.original_encoding) -> None... 
aElems = soup.select('a') 
#type: <class 'list'> 
lengthElems = len(aElems) 

for i in range (0, lengthElems): 
    text = aElems[i].getText() 
    #text = text.decode('utf-8') 
    link = aElems[i].get('href') 
+0

FYI作为一种解决方法我现在已经做了搜索,并在下面的代码我输出到Excel文件替换 - 字符组合:áá 谩¢L A §,C éé A E ëë A®î II I A±ñ A²ò A 3ó öö 那张ü úU Ãïï à Ä... – Wouter

回答

0

只需将您的系统默认编码到脚本内UTF-8。

在你的文件的顶部,你想这样的:

import sys 

if __name__ == "__main__": 
    reload(sys) 
    sys.setdefaultencoding("utf-8") 
+0

感谢您的快速反应。抱歉,我忘记提及我正在使用Python 3.4.4版[MSC v.1600 64位(AMD64)]。我认为utf-8已经是默认了?我想这也是为什么我得到“名称”重新加载“没有定义”。所以我已经导入importlib做一个重载使用,但然后我得到“'模块'对象没有属性'setdefaultencoding'”... – Wouter