要求分析:次のようにクローラが歌の網易クラウド音楽の歌詞を取得し使用して、効果は次のとおりです。
分析:アクセス:よう、APIによる公式歌詞の歌詞を取得https://music.163.com/#/song?id=1417093533は次のようにインターフェースがあり、曲の詳細ページ程度にジャンプします
あなたは、コール・インタフェースの歌詞を取得する必要があります
リンク:http://music.163.com/api/song/media?id=注:idは曲のIDが続きます
以下のような:1417093533:曲のIDがある曲のゴジラの歌詞の上にGET
私たちは、Webサイトがされて訪問し、入ってくる歌詞への鍵のインタフェースとして、数字のこの文字列を参照してくださいhttp://music.163.com/api/song/media?id=1417093533以下の内容を表示します
我々は慎重に、サイトの構造を見て、実際には、それはJSON形式のデータ(Pythonの辞書として理解することができる)、詳細は次のとおりです。
- 「SongStatus」:1#これは国家の歌を表現しなければなりません
- 「LyricVersion」:222#この歌詞のバージョンを示す必要があります
- 「歌詞」:#このコンテンツは、歌詞の一部含まれています
- 「コード」:200#このステータスコードを検索歌詞
私たちは、「歌詞」の部分を取得する必要がありますので、缶(ない純粋な音楽の歌詞、無視することができます!)
準備:
ピップとリクエスト・ライブラリをインストールします(あなたがBaiduのを見てすることはできません)
コード:
import requests
def requests_html(url):
# 我们增加一个headers,如果不加,网易云会认为我们是爬虫程序,从而拒绝我们的请求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE',
}
# 利用requests模块请求网易云的歌词页面
demo = requests.get(url, headers=headers)
# 如果正确获取到网页则返回文本内容
if demo.status_code == 200:
return demo.text
else:
print(url,"请求失败")
def parser_html(txt):
# 这里我就不异常处理了,直接获取内容,eval函数把文本内容转换为字典
dic = eval(text)
print("文本当前的数据类型是:",type(dic))
# 字典是键值对类型的,获取歌词部分
lyric = dic['lyric']
# 通过观察文本内容发现,文本每行以 '\n'字符结束,用文本的split切割\n字符获取每行的歌词内容
for line in lyric.split('\n'):
print(line)
# url中的信息就是歌词链接,可以试试你自己的链接,更改ID即可
url = 'http://music.163.com/api/song/media?id=1417093533'
# text里就是网页的内容了
text = requests_html(url)
# 把text里的内容交给parser_html函数解析
parser_html(text)