。1つの #!は/ usr / binに/ Pythonの 2 #- * -コーディング:UTF-8 - * - 3。 #@time:2020年3月25日午後7時09分 。4 #@author:孟 。5 #@file:paxmly.py 。6 #@Software:PyCharm 。7 。8 インポート要求 #クロールするためのアナログ・ブラウザページ情報ページ 。9 インポート parsel #パケット解析ページ 10のヘッダー= { #偽装ブラウザリクエストヘッダデータ形式辞書である 11。 「ユーザエージェント」:"Mozilla / 5.0(Windows NTの10.0; Win64の、x64-)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 80.0.3987.149サファリ/ 537.36 ' 12である } 13が応答= requests.get(URL = ' HTTPS://www.ximalaya。 COM / youshengshu / 34013148 / P2 / 'ヘッダ=ヘッダ)#クロールページ指定されたプレイリスト 14 SEL = parsel.Selector(response.text) #解析ウェブ 15 sound_list = sel.css(' .soundリストUL-LI ")#取得30ページはリンク 16 list_all = [] #すべての結果の格納されたリストを 17。 のためのサウンドで sound_list [午前0時30]: #スライス 18は #プリント(サウンド) 19。 MEDIA_URL sound.css =(' Aは:: ATTR(HREF)').extract_first() #の削除リンク 20は #印刷(MEDIA_URL)が 21である MEDIA_URL media_url.split =(' / ') - 1 ] #オーディオID取り除く 22は #印刷(MEDIA_URL) 23である (MEDIA_NAME sound.css = " :: ATTR(タイトル)").extract_first() #除去名オーディオ 24 #の印刷(MEDIA_NAME) 25 list_all.append((MEDIA_URL 、MEDIA_NAME)) #のリストへの追加 26 #印刷(list_all) 27 #取得し、実際の曲カプセル化されたリンクはdefを定義関数 28 デフmedia_api(track_ID): 29 api_url = F " https://www.ximalaya.com/revision/play/v1/audio?id= }&PTYPE track_ID = {1。' ; 30 応答= requests.get(api_url、ヘッダー= ヘッダ) 31れる #プリント(response.json()) 32 #JSONリターン辞書を用いて抽出[] 33である data_json = response.json() 34は = SRC data_json [ ' データ' ] [ ' SRC ' ] 35 リターンSRC 36 #のダウンロードMP4にダウンローダ 37 DEF download_meida(MEDIA_URL、MEDIA_NAME): 38が 応答= requests.get(MEDIA_URL、ヘッダー= ヘッダ); 39 を開くと(F ' {} .MP4 MEDIA_NAME '、MODE = ' WB ')AS F: #のダウンロードは、ファイル名としてファイル 40 f.write(response.content) 41がある のIF __name__ == ' __main__ ' : 42である ため、URL にlist_all: 43は、 印刷(URL [1 ]) 44のIS = media_api true_url(URL [0]) #1 私たちのオーディオID、一意の識別子の代表的な 45 名のURL = [1 ] 46である download_meida(true_url、名前)
1 #能发送HTTP请求的库 2 インポート要求 3 インポートparsel 4つのヘッダー= { 5 ' のUser-Agent ':' のMozilla / 5.0(のWindows NT 6.1、Win64の、のx64)のAppleWebKit / 537.36(ヤモリ様KHTML)クローム/ 77.0 .3865.120サファリ/ 537.36 ' 6 } 7 8 DEF download_meida(MEDIA_URL、MEDIA_NAME): 9 応答= requests.get(MEDIA_URL、ヘッダー= ヘッダ); 10 オープン(fの' {MEDIA_NAME} .MP4 '、モード= ' WB ')Fとして: 11 f.write(response.content) 12 13 DEF media_api(track_id): 14 api_url = F ' https://www.ximalaya.com/revision/play/v1/audio?id={track_id}&ptype = 1 ' ; 15 応答= requests.get(api_url、ヘッダー= ヘッダ) 16 #プリント(response.json()) 17 #JSON返回字典类型提取使用[] 18 data_json = response.json() 19 SRC = data_json [ ' データ' ] [ ' SRC ' ] 20 リターンSRC 21は、 22であり #プリント(media_api(98791745)) 23である 24 DEFの:get_total_page(PAGE_URL) 25 #要求ページ 26が 応答= requests.get(PAGE_URL、ヘッダー= ヘッダ) 27 #は、取得したコンテンツHTMLページ 28 SEL = parsel.Selector(応答.text) 29 #CSSセレクタによってラベルを見つけるためには、音のリスト、次のLi ULのようにクラス属性をリストに.sound 30 sound_list = sel.css(「.soundリストULのリチウム」) 31 #最初の30ページのリンク30の前に傍受される 32 のためのサウンドに sound_list [30 ]: 33は、 #()オブジェクトのテキストから抽出されextract_first 34 #取得HREFコンテンツのタグの属性 35 (MEDIA_URL sound.css = ' :: ATTR(HREF)' )(.extract_first) 36 #/ youshengshu / 16411402 / 98791745--のみ最後方IDに 37 MEDIA_URL media_url.split =(' / ') - 1 ] 38であり、 #は、タグのコンテンツのタイトル属性取得 39 MEDIA_NAME sound.css =(' :: ATTR(タイトル)' ).extract_first() 40 #サイクル全体収率リターンの内容と 41は、 降伏MEDIA_NAME、MEDIA_URL 42は、 43であります IF __name__ == 「__main__ 」: 44である #循環ページがページ範囲の範囲代表的なダウンロードダウンロード 45の ためのページで(1,3範囲:) 46である meidas get_total_page =(F ' https://www.ximalaya.com/yinyue / 23841180 /ページ{P} ' ) 47 のための media_idこの、MEDIA_NAME でmeidas: 48 #印刷(MEDIA_URL、MEDIA_NAME) 49 MEDIA_URL = media_api(media_idこの) 50 プリント(MEDIA_URL) 51である download_meida(MEDIA_URL、MEDIA_NAME)