我一直在研究一个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"
☺☺☺☺☺