来自请求/bs4的python unicode字符
我有一个脚本,使用请求和bs4从metrolyrics获取歌曲的歌词 问题是,当我打印它时,它会显示类似这样的内容(歌词的一部分)来自请求/bs4的python unicode字符,python,unicode,beautifulsoup,python-requests,Python,Unicode,Beautifulsoup,Python Requests,我有一个脚本,使用请求和bs4从metrolyrics获取歌曲的歌词 问题是,当我打印它时,它会显示类似这样的内容(歌词的一部分) 拉比、爸爸、安拉、喇嘛、伊玛目、毕比、达摩、苏拉、托拉、方格、维诺、卡什、阿拉尔、赎罪日、夸雷西马、斋月 什么时候应该是这样 拉比、爸爸、喇嘛、伊玛目、毕比、达摩、苏拉、律法、方格、维诺、卡什、,ḥalāl、赎罪日、夸雷西玛、斋月 我使用的代码 import requests from bs4 import BeautifulSoup import os try:
拉比、爸爸、安拉、喇嘛、伊玛目、毕比、达摩、苏拉、托拉、方格、维诺、卡什、阿拉尔、赎罪日、夸雷西马、斋月
什么时候应该是这样
拉比、爸爸、喇嘛、伊玛目、毕比、达摩、苏拉、律法、方格、维诺、卡什、,ḥalāl、赎罪日、夸雷西玛、斋月
我使用的代码
import requests
from bs4 import BeautifulSoup
import os
try:
from urllib.parse import quote_plus
except ImportError:
from urllib import quote_plus
def get_lyrics(song_name):
song_name += ' metrolyrics'
name = quote_plus(song_name)
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11'
'(KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
url = 'http://www.google.com/search?q=' + name
result = requests.get(url, headers=hdr).text
link_start = result.find('http://www.metrolyrics.com')
if(link_start == -1):
return("Lyrics not found on Metrolyrics")
link_end = result.find('html', link_start + 1)
link = result[link_start:link_end + 4]
lyrics_html = requests.get(link, headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel'
'Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, '
'like Gecko) Chrome/55.0.2883.95 Safari/537.36'
}
).text
soup = BeautifulSoup(lyrics_html, "lxml")
raw_lyrics = (soup.findAll('p', attrs={'class': 'verse'}))
paras = []
try:
final_lyrics = unicode.join(u'\n', map(unicode, raw_lyrics))
except NameError:
final_lyrics = str.join(u'\n', map(str, raw_lyrics))
final_lyrics = (final_lyrics.replace('<p class="verse">', '\n'))
final_lyrics = (final_lyrics.replace('<br/>', ' '))
final_lyrics = final_lyrics.replace('</p>', ' ')
return (final_lyrics)
导入请求
从bs4导入BeautifulSoup
导入操作系统
尝试:
从urllib.parse导入quote_plus
除恐怖外:
从urllib导入quote_plus
def get_歌词(歌曲名称):
song_name+=“metrolyrics”
名称=引用加上(歌曲名称)
hdr={'User-Agent':'Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.11'
“(KHTML,像壁虎一样)Chrome/23.0.1271.64 Safari/537.11”,
‘接受语言’:‘en-US,en;q=0.8’,
“连接”:“保持活动状态”}
url='1〕http://www.google.com/search?q=“+姓名
结果=requests.get(url,headers=hdr).text
link\u start=result.find('http://www.metrolyrics.com')
如果(链接开始==-1):
返回(“Metrolyrics上未找到歌词”)
link\u end=result.find('html',link\u start+1)
链接=结果[链接开始:链接结束+4]
歌词\u html=requests.get(链接、标题={
“用户代理”:“Mozilla/5.0(Macintosh;英特尔”
“Mac OS X 10_12_1)AppleWebKit/537.36(KHTML,”
‘像壁虎一样)铬/55.0.2883.95狩猎/537.36’
}
).文本
汤=美丽的汤(歌词“lxml”)
原始歌词=(soup.findAll('p',attrs={'class':'verse'}))
第[]段
尝试:
final\u歌词=unicode.join(u'\n',map(unicode,原始歌词))
除名称错误外:
最终歌词=str.join(u'\n',map(str,原始歌词))
最终歌词=(最终歌词。替换(“”,“\n”))
最终歌词=(最终歌词。替换(“
,”)
最终歌词=最终歌词。替换(“
”,“)
返回(最终歌词)
我尝试过.encode('utf-8')
.encode('unicode-escape')和重新转换,但没有解决方案
我有另一个脚本,其中我使用了musixmatch api,在那里它显示了正确的unicode我在
获取歌词
函数中做了一些小改动:
return final_lyrics.encode('latin1').decode('utf-8')
并得到了理想的输出:
# python2
print get_lyrics('kashèr')
...
Rabbi, Papa, Allah, Lama, Imam, Bibbia, Dharma, Sura, Torah, Pane, Vino, Kashèr, Ḥalāl, Yom Kippur, Quaresima, Ramadan
...
我已经试过了,在返回后使用它不起作用,但在返回时使用它却起作用