BeautifulSoup没有显示正确的Unicode字符

时间:2014-12-08 18:54:46

标签: html python-3.x unicode beautifulsoup html-entities

我一直在研究一个Python脚本,它会抓取一个歌词网站,以获得乐队专辑中单词的频率。这是我第一次使用网页抓取,所以请原谅我缺乏知识。我使用的是Python 3.3.3和BeautifulSoup 4。

它在很大程度上起作用,但它没有按照我想要的方式处理从HTML实体到Unicode字符的转换。

例如,特定专辑中的一个词是似曾相识。当我运行下面的代码时......

band = "protestthehero"
album = "volition"

response = requests.get('http://www.darklyrics.com/lyrics/'+band+'/'+album+'.html')
soup = bs4.BeautifulSoup(response.text)
[s.extract() for s in soup('h3')]                   #remove h3 tags (song titles)
lyrics = soup.select('div.lyrics');                 #select the lyrics class
[div.extract() for div in lyrics[0].findAll('div')] #remove nested divs
[a.extract() for a in lyrics[0].findAll('a')]       #remove links

lyrics_string = str(lyrics[0]) #convert to a string
print(lyrics_string)

...似曾印刷为déjÃ,这根本不对。看看BeautifulSoup用于获取这些字符的HTML实体,它似乎最初是以下序列:

déjÃ

这是有道理的,但我只是为什么网站将déjà转换为此而感到困惑。我的猜测是网站创建者只是将特殊字符复制到HTML页面而不是实际使用HTML实体,但我不确定。如果是这样的话,有没有办法得到正确的角色?我有点不知所措......提前感谢您的帮助!

编辑:谢谢Jukka。添加一行来更改响应的编码就可以了解

response = requests.get('http://www.darklyrics.com/lyrics/'+band+'/'+album+'.html')
response.encoding = "utf-8"

☺☺☺☺☺

0 个答案:

没有答案