爬虫類プロジェクト実戦12:クールな犬の音楽を這う
27923 ワード
クールな犬の音楽を登ってダウンロードします ターゲット プロジェクト準備 プロジェクト分析 逆登り分析 コード実装 効果表示
ターゲット
クールな犬の音楽を登り、クールな犬の音楽apiを利用して歌をダウンロードします.
プロジェクトの準備
ソフトウェア:Pycharmサードパーティライブラリ:requests,fake_useragent,selenium,reサイトアドレス:https://www.kugou.com/
プロジェクト分析
apiインタフェース:http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword=歌名または歌手名&page=1&pagesize=20&showtype=1注:出典:https://blog.csdn.net/qq_32551929/article/details/87256150?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159730425319725211907849%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159730425319725211907849&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-2-87256150.pc_ecpm_v3_pc_rank_v3&utm_term=%E9%85%B7%E7%8B%97%E9%9F%B3%E4%B9%90api&spm=1018.2118.3001.4187
ここの歌手名入力:付辛博を開けてみてください.では、この歌手の多くの曲の名前が見つかり、mp 3のような曲のリンクは見られませんでした.これはapiの使い方次第です.ブラウザを開き、クール犬音楽検索ボックスに付辛博を入力します.勝手に歌を開けて
で最初の曲を開きましょう.ポイントが来て、この歌のurlリンクで構成されています.
https://www.kugou.com/song/#hash=C789A79D43105772F2783807A0D33B19&album_id=1740630
後ろhash=とalbum_id=のものはさっきのapiに表示されています.
これで各曲のリンク先が得られます.つなぎ合わせるだけでOK.しかし、接続を取得するには十分ではありません.各曲の曲の住所も取得します.で見つけましたが、ダイナミックJavaScriptでロードされているため、ソースコードにはまったく見つかりません.これも前に出会ったことがあります.また、クールな犬音楽も様々な暗号化方式を採用しています.自分では浅い試みをしても分かりません.selenium方式で曲のソースアドレスを取得するしかありません.
ぎゃくこうぶんせき
同じipアドレスで複数回アクセスすると閉鎖されるリスクに直面します.ここではfake_を採用します.useragentは,ランダムなUser−Agent要求ヘッダを生成してアクセスする.
コード実装
1.対応するサードパーティ製ライブラリをインポートし、classクラス継承objectを定義し、initメソッド継承selfを定義し、メイン関数main継承selfを定義します.
2.リクエストを送信し、Webページを取得します.
3.apiインタフェースを使用して、各曲のURLを取得します.
4.ローカルに一括ダウンロードします.
5.主関数および関数呼び出し.
効果表示
ファイルの場所を開きます.
勝手に1曲再生してみてください.に成功しました.完全なコードは次のとおりです.
宣言:自己学習の参考としてのみ使用します.
ターゲット
クールな犬の音楽を登り、クールな犬の音楽apiを利用して歌をダウンロードします.
プロジェクトの準備
ソフトウェア:Pycharmサードパーティライブラリ:requests,fake_useragent,selenium,reサイトアドレス:https://www.kugou.com/
プロジェクト分析
apiインタフェース:http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword=歌名または歌手名&page=1&pagesize=20&showtype=1注:出典:https://blog.csdn.net/qq_32551929/article/details/87256150?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159730425319725211907849%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159730425319725211907849&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-2-87256150.pc_ecpm_v3_pc_rank_v3&utm_term=%E9%85%B7%E7%8B%97%E9%9F%B3%E4%B9%90api&spm=1018.2118.3001.4187
ここの歌手名入力:付辛博を開けてみてください.では、この歌手の多くの曲の名前が見つかり、mp 3のような曲のリンクは見られませんでした.これはapiの使い方次第です.ブラウザを開き、クール犬音楽検索ボックスに付辛博を入力します.勝手に歌を開けて
で最初の曲を開きましょう.ポイントが来て、この歌のurlリンクで構成されています.
https://www.kugou.com/song/#hash=C789A79D43105772F2783807A0D33B19&album_id=1740630
後ろhash=とalbum_id=のものはさっきのapiに表示されています.
これで各曲のリンク先が得られます.つなぎ合わせるだけでOK.しかし、接続を取得するには十分ではありません.各曲の曲の住所も取得します.で見つけましたが、ダイナミックJavaScriptでロードされているため、ソースコードにはまったく見つかりません.これも前に出会ったことがあります.また、クールな犬音楽も様々な暗号化方式を採用しています.自分では浅い試みをしても分かりません.selenium方式で曲のソースアドレスを取得するしかありません.
ぎゃくこうぶんせき
同じipアドレスで複数回アクセスすると閉鎖されるリスクに直面します.ここではfake_を採用します.useragentは,ランダムなUser−Agent要求ヘッダを生成してアクセスする.
コード実装
1.対応するサードパーティ製ライブラリをインポートし、classクラス継承objectを定義し、initメソッド継承selfを定義し、メイン関数main継承selfを定義します.
import requests
from fake_useragent import UserAgent
from selenium import webdriver
import re
class kugou(object):
def __init__(self):
self.url = 'http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword={}'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
self.driver=webdriver.Chrome()
def main(self):
pass
if __name__ == '__main__':
spider = kugou()
spider.main()
2.リクエストを送信し、Webページを取得します.
def get_html(self,url):
response = requests.get(url, headers=self.headers)
html = response.json()
return html
3.apiインタフェースを使用して、各曲のURLを取得します.
def get_link(self,html):
content_list=html['data']['info']['singername']
for data in content_list:
singername=data['singername']
songname=data['songname']
album_id=data['album_id']
hash=data['hash']
filename=songname+' '+singername
print(filename)
link='https://www.kugou.com/song/#hash=%s&album_id=%s'%(hash,album_id)
self.parse_html(link,filename)
4.ローカルに一括ダウンロードします.
def parse_html(self,link,filename):
self.driver.get(link)
new_html=self.driver.page_source
musics=re.compile('
5.主関数および関数呼び出し.
def main(self):
name=str(input(" :"))
host=self.url.format(name)+'&page={}&pagesize=20&showtype=1'
end_page = int(input(" :"))
for page in range(1, end_page + 1):
url = host.format(page)
print(" %s 。。。。" % page)
html=self.get_html(url)
link=self.get_link(html)
try:
self.parse_html(link)
except:
pass
効果表示
ファイルの場所を開きます.
勝手に1曲再生してみてください.に成功しました.完全なコードは次のとおりです.
import requests
from fake_useragent import UserAgent
from selenium import webdriver
import re
class kugou(object):
def __init__(self):
self.url = 'http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword={}'
ua = UserAgent(verify_ssl=False)
for i in range(1, 100):
self.headers = {
'User-Agent': ua.random
}
self.driver=webdriver.Chrome()
def __del__(self):
self.driver.close()#
def get_html(self,url):
response = requests.get(url, headers=self.headers)
html = response.json()
return html
def get_link(self,html):
content_list=html['data']['info']
for data in content_list:
singername=data['singername']
songname=data['songname']
album_id=data['album_id']
hash=data['hash']
filename=songname+' '+singername
print(filename)
link='https://www.kugou.com/song/#hash=%s&album_id=%s'%(hash,album_id)
self.parse_html(link,filename)
def parse_html(self,link,filename):
self.driver.get(link)
new_html=self.driver.page_source# .mp3
musics=re.compile('
宣言:自己学習の参考としてのみ使用します.