爬虫類プロジェクト実戦12:クールな犬の音楽を這う


クールな犬の音楽を登ってダウンロードします
  • ターゲット
  • プロジェクト準備
  • プロジェクト分析
  • 逆登り分析
  • コード実装
  • 効果表示


  • ターゲット
    クールな犬の音楽を登り、クールな犬の音楽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
    ここの歌手名入力:付辛博を開けてみてください.爬虫项目实战十二:爬取酷狗音乐_第1张图片では、この歌手の多くの曲の名前が見つかり、mp 3のような曲のリンクは見られませんでした.これはapiの使い方次第です.ブラウザを開き、クール犬音楽検索ボックスに付辛博を入力します.勝手に歌を開けて
    爬虫项目实战十二:爬取酷狗音乐_第2张图片で最初の曲を開きましょう.爬虫项目实战十二:爬取酷狗音乐_第3张图片ポイントが来て、この歌のurlリンクで構成されています.
    https://www.kugou.com/song/#hash=C789A79D43105772F2783807A0D33B19&album_id=1740630 在这里插入图片描述
    後ろhash=とalbum_id=のものはさっきのapiに表示されています.爬虫项目实战十二:爬取酷狗音乐_第4张图片
    在这里插入图片描述これで各曲のリンク先が得られます.つなぎ合わせるだけでOK.しかし、接続を取得するには十分ではありません.各曲の曲の住所も取得します.爬虫项目实战十二:爬取酷狗音乐_第5张图片で見つけましたが、ダイナミック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
    

    効果表示
    爬虫项目实战十二:爬取酷狗音乐_第6张图片ファイルの場所を開きます.
    爬虫项目实战十二:爬取酷狗音乐_第7张图片勝手に1曲再生してみてください.爬虫项目实战十二:爬取酷狗音乐_第8张图片に成功しました.完全なコードは次のとおりです.
    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('

    宣言:自己学習の参考としてのみ使用します.