手を取って教えます.Pythonを使ってQQ音楽データを取ります.(第四弾)

26475 ワード

【一、プロジェクト目標】
手を取って教えます.Pythonを使ってQQ音楽データ(第一弾)を取ります.私達はQQ音楽指定歌手のシングルランキングの指定ページ数の曲のタイトル、アルバム名、リンクを再生することを実現しました.
手を取って教えます.Pythonを使ってQQ音楽データ(第二弾)を取ります.私達はQQ音楽指定曲の歌詞と指定曲のトップページから熱い評価を得ることができました.
手を取って教えます.Pythonを使ってQQ音楽データ(第三弾)をキャプチャします.もっと多くの評論を得て、詞雲図を生成します.
今回は三つの項目を一緒にカプセル化し、メニュー制御で異なるデータを取り込む.
 
【二、必要な倉庫】
主に関連するライブラリは、requests、openpyxl、html、json、wodcloud、jiebaがあります.
単語の雲図背景画像を交換するにはnumpyライブラリとPILライブラリ(pipinstall pillow)が必要です.
生成が必要なら.exeはpyinstaller-Fが必要です.
 
【三、プロジェクト実現】
1.まずメニューを決めて、どの機能を実現しますか?
①指定された歌手の楽曲情報(タイトル、アルバム、リンク)を取得する
②指定された曲の歌詞を取得する
③指定曲コメントの取得
④生成語雲図
⑤システムを終了する
コードは以下の通りです
class QQ(): def menu(self): print('    QQ      ,       ,   。
') while True: try: print('
1.
2.
3.
4.
5.
') choice = int(input(' :')) if choice == 1: self.get_info() elif choice == 2: self.get_id() self.get_lyric() elif choice == 3: self.get_id() self.get_comment() elif choice == 4: self.wordcloud() elif choice == 5: print(' !') break else: print(' , 。
') except: print(' , 。
')
最初の行のクラスを作成し、2番目の行はメニュー関数を定義します.ここではクラスの実装を使っています.中のすべての関数の最初のパラメータはselfです.
whiletrueはメニューを無限に循環させます.
Try…except…エラーでサイクルが終了しないようにする;
他のコードは、設定入力の異なる数字に対応して異なる関数を開きます.
2.パッケージ項目(一)はget_info()
コードは以下の通りです
def get_info(self):
        wb=openpyxl.Workbook() #      sheet=wb.active #          sheet.title='song' #       sheet['A1'] ='   ' #   , A1      sheet['B1'] ='    ' #   , B1      sheet['C1'] ='    ' #   , C1      url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' name = input('           :') page = int(input('            :')) for x in range(page): params = { 'ct':'24', 'qqmusic_ver': '1298', 'new_json':'1', 'remoteplace':'sizer.yqq.song_next', 'searchid':'64405487069162918', 't':'0', 'aggr':'1', 'cr':'1', 'catZhida':'1', 'lossless':'0', 'flag_qc':'0', 'p':str(x+1), 'n':'20', 'w':name, 'g_tk':'5381', 'loginUin':'0', 'hostUin':'0', 'format':'json', 'inCharset':'utf8', 'outCharset':'utf-8', 'notice':'0', 'platform':'yqq.json', 'needNewCode':'0' } res = requests.get(url,params=params) json = res.json() list = json['data']['song']['list'] for music in list: song_name = music['name'] #      ,       song_name album = music['album']['name'] #      ,      album link = 'https://y.qq.com/n/yqq/song/' + str(music['mid']) + '.html

' # , link sheet.append([song_name,album,link]) # name、album link , append Excel wb.save(name+' '+str(page*20)+' .xlsx') # Excel print(' !
')
3.パッケージ項目(二)はget_id()とget_リリック
コードは以下の通りです
def get_id(self): self.i = input('      :') url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' #          url 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'} params = {'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '71600317520820180', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '10', 'w': self.i, 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0'} res_music = requests.get(url_1,headers=headers,params=params) json_music = res_music.json() self.id = json_music['data']['song']['list'][0]['id'] # print(self.id) def get_lyric(self): url_2 = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg' #          url headers = { 'origin':'https://y.qq.com', 'referer':'https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html', 'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} params = { 'nobase64':'1', 'musicid':self.id, '-':'jsonp1', 'g_tk':'5381', 'loginUin':'0', 'hostUin':'0', 'format':'json', 'inCharset':'utf8', 'outCharset':'utf-8', 'notice':'0', 'platform':'yqq.json', 'needNewCode':'0', } res_music = requests.get(url_2,headers=headers,params=params) js_1 = res_music.json() lyric = js_1['lyric'] lyric_html = html.unescape(lyric) #      html.unescape