ホームページ  >  記事  >  バックエンド開発  >  NetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラー

NetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラー

不言
不言オリジナル
2018-08-29 11:57:054493ブラウズ

この記事の内容は、非常に簡単な Python クローラーを使用した NetEase Cloud Music のダウンロードに関するものです。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

目標

偶然、女将さんの猫の「雲と煙が雨に変わる」を聴いて、その気だるい歌声と学生っぽい歌詞に一目惚れし、ずっと聴き続けました。ループの曲です。それからアニメ「私は江小白」を見に行ったのですが、第二期もとても楽しみです…

一目見て帰ってもまた会いたいです…

さて、ナンセンスではありません。今回の目標は、NetEase Cloud 内の歌手の ID に基づいて歌手のポピュラー音楽の歌詞とオーディオをダウンロードし、ローカル フォルダーに保存することです。

設定の基本

  • Python

  • Selenium (設定方法については、「Selenium の設定」を参照してください)

  • Chrome ブラウザ (他のブラウザも利用可能であり、それに応じて変更する必要があります)

分析

NetEase Cloud の Web サイトをクロールした友人の場合NetEase Cloud にはクロール防止メカニズムがあることを知っておく必要があり、POST を実行するときに、いくつかの情報パラメータの暗号化機能をシミュレートする必要があります。しかし、ここでは簡単にするために、初心者でも理解できるようにしています。 Selenium はログインをシミュレートするために直接使用され、インターフェイスは音楽と歌詞を直接ダウンロードするために使用されます。

実験手順:

  1. 歌手 ID に基づいて歌手の人気曲リスト、曲名、リンクを取得し、CSV に保存します。ファイル;

  2. #csv ファイルを読み取り、曲リンクに従って曲 ID を抽出し、対応するインターフェイスを使用して音楽と歌詞をダウンロードします;

  3. 音楽を入れて歌詞をローカルに保存します。

NetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラー#Python の実装

このパートでは、いくつかの重要な関数を紹介します...

歌手情報の取得

Selenium を使用すると、Web ページのリクエストを読み取る必要がなく、Web ページのソース コードから対応する情報を直接抽出できます。歌手ページのソース コードを見ると、必要な情報が iframe 内にあることがわかります。そのため、まず iframe に切り替える必要があります:

browser.switch_to.frame('contentFrame')

読み続けて、曲名とリンクを見つけます。必要な情報は

id ​​="hotsong-list"

タグ内にあり、各行は tr タグに対応します。したがって、最初にすべての tr コンテンツを取得してから、単一の tr を反復処理します。 <pre class="brush:php;toolbar:false">data = browser.find_element_by_id(&quot;hotsong-list&quot;).find_elements_by_tag_name(&quot;tr&quot;)</pre>注: 前者は

find_element

、後者は find_elements、後者はリストを返します。 次のステップは、単一の

tr

タグの内容を解析し、曲名とリンクを取得することです。両方とも class="txt"# にあることがわかります。 ## タグ、リンクは href 属性、名前は title 属性で、get_attribute() 関数を通じて直接取得できます。

for i in range(len(data)):
    content = data[i].find_element_by_class_name("txt")
    href = content.find_element_by_tag_name("a").get_attribute("href")
    title = content.find_element_by_tag_name("b").get_attribute("title")
    song_info.append((title, href))
NetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラー歌詞のダウンロード

NetEase Cloud には歌詞を取得するためのインターフェイスがあります。リンクは http://music.163 です。 .com/api/song...

リンク内の数字は曲 ID なので、曲 ID を取得したら、リンクから歌詞を直接ダウンロードできます。歌詞ファイルは ## にあります。 #json

形式なので、

json

パッケージを使用する必要があります。

そして、直接取得した歌詞のうち、各行にはタイムラインが含まれているため、正規表現を使用して削除する必要があります。完全なコードは次のとおりです。 NetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラー

def get_lyric(self):
    url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(self.song_id) + '&lv=1&kv=1&tv=-1'
    r = requests.get(url)
    json_obj = r.text
    j = json.loads(json_obj)
    lyric = j['lrc']['lyric']
    # 利用正则表达式去除时间轴
    regex = re.compile(r'\[.*\]')
    final_lyric = re.sub(regex, '', lyric)
    return final_lyric
Download Audio

NetEase Cloud はオーディオ ファイル用のインターフェースも提供します。リンクは http://music.163.com/song/med...

##リンク内の # 数字は曲の ID で、曲の ID に基づいてオーディオ ファイルを直接ダウンロードできます。完全なコードは次のとおりです:

def get_mp3(self):
    url = 'http://music.163.com/song/media/outer/url?id=' + str(self.song_id)+'.mp3'
    try:
        print("正在下载:{0}".format(self.song_name))
        urllib.request.urlretrieve(url, '{0}/{1}.mp3'.format(self.path, self.song_name))
        print("Finish...")
    except:
        print("Fail...")

関連する推奨事項:

Python を使用して NetEase Cloud Music で人気のあるコメントをクロールする方法

##Python クロール qq 音楽を取得するプロセスの例 #

以上がNetEase Cloud Music をダウンロードするための非常にシンプルな Python クローラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。