この記事では、主に NetEase Cloud 音楽のホットレビューをキャプチャするための Python3 実用的なクローラーに関する関連情報を紹介します。この記事では、学習や仕事に役立つ特定の学習価値があります。以下のエディターと一緒に学習してください。
はじめに
私はPythonクローラーを始めたばかりで、半月ほどPythonを書いていなかったため、ほとんど忘れていました。そこで、スキルを練習するために簡単なクローラーを作成するつもりでした。NetEase Cloud Music の最大の特徴は、正確な曲の推奨と独自のユーザー レビューであると感じたので、NetEase Cloud Music の人気の曲の熱いレビューを取得するためにこのメソッドを書きました。爬虫類のリスト。私もまだクロールを始めたばかりです。ご意見やご質問がございましたら、お気軽にお問い合わせください。一緒に進歩していきましょう。
これ以上ナンセンスはありません~詳細な紹介を見てみましょう。
私たちの目標は、NetEase Cloud の人気曲ランキングのすべての曲の人気コメントをクロールすることです。
これにより、クロールに必要な作業負荷が軽減されるだけでなく、高品質のコメントも保存できます。
実装分析
まず、図に示すように、NetEase Cloud Webバージョンを開きます:
ランキングリストをクリックし、次にクラウドミュージックのホットソングリストをクリックします。左、写真に示すように:
まず、ランダムに曲を開いて、指定した曲の人気のある曲のレビューを取得する方法を調べてみましょう。写真に示すように、最近気に入った曲を選択しました。例:
入力すると、このページのすぐ下に曲のレビューが表示されます。次に、これらのコメントを取得する方法を見つける必要があります。
次に、Web コンソールを開き (Chrome の開発者ツールを開きます。他のブラウザでも同様であるはずです)、図に示すように、Chrome の下で F12 を押します:
[ネットワーク] を選択し、F5 を押して更新します。更新後に取得されたデータは次のとおりです。
ブラウザが多くの情報を送信していることがわかります。それではどれが必要ですか?ここでは、ステータス コードによってサーバー リクエストのステータスを示すことができます。ステータス コードは、リクエストが正常であることを意味する 200 と、リクエストが異常であることを意味する 304 です (さまざまな種類があります)。ステータス コードについて詳しく知りたい場合は、自分で検索してください。ここでは 304 の具体的な意味については説明しません。したがって、通常はステータス コード 200 のリクエストのみを確認する必要があります。また、右側の列のプレビューを通じて、サーバーがどのような情報を返すかを大まかに観察する (または応答を表示する) ことができます。これら 2 つの方法を組み合わせることで、分析したいリクエストをすぐに見つけることができます。検索を繰り返した結果、画像に示すように、最終的に曲レビューを含むリクエストを見つけました:
CSDN ではスクリーンショットがあまり明確ではないかもしれませんが、R_SO_4_489998494?csrf_token=
という名前の POST リクエストでこの曲を含む曲レビューを見つけました。 。より明確に確認できるように、このブロックのスクリーンショットを撮りましょう:
リクエストの基本情報:
リクエストのヘッダー:
リクエスト内のフォームデータ:
この曲の曲レビューを含むリクエスト URL は http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token= であることがわかります。いくつかの曲を変更した後、このリクエストはの最初の部分は同じですが、R_SO_4_ の直後の数字列が異なります。各曲には指定された ID があり、R_SO_4_ に続くのは曲の ID であると推測できます。
送信されたフォーム データをもう一度見てみましょう。params と encSecKey という名前の 2 つのデータをフォームに入力する必要があることがわかります。以下は大きな文字列です。いくつかの曲を変更すると、各曲の params と encSecKey が異なることがわかります。したがって、これら 2 つのデータは特定のアルゴリズムによって暗号化されている可能性があります。
サーバーから返されるコメント関連データは json 形式であり、非常に豊富な情報 (コメンテーターに関する情報、コメント日付、いいねの数、コメントの内容など) が含まれており、その中で hotComments が最も注目されています。写真に示すように、合計 15 個のコメントがあります:
この時点で、方向は決定されました。つまり、params と の 2 つのパラメーター値を決定するだけです。 encSecKey。しかし、これら 2 つのパラメータは特定のアルゴリズムを通じて暗号化されています。どうすればよいでしょうか? http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494?csrf_token= R_SO_4_ の後の数字はこの曲の ID 値で、別の曲の場合は param と encSecKey の値です。 A などの曲のこれら 2 つのパラメータ値を曲 B に渡す場合、同じページ数では、このパラメータは普遍的です。つまり、曲の最初のページの 2 つのパラメータ値です。 A はソング B に渡されます。他のソングの 2 つのパラメーターについては、対応するソングの最初のページでコメントを取得できます。2 ページ目、3 ページ目などについても同様です。
実際、最初のページで人気のある 15 件のコメントを取得する必要があるだけなので、曲を見つけて、最初のページのリクエストにある params と encSecKey の 2 つのパラメーター値をコピーするだけです。曲をダウンロードすればすぐに使用できます。
これら 2 つのパラメータを復号化する方法については、実際には強力な Zhihu に答えがあります。興味のある方はご覧ください (https://www.zhihu.com/question/36081767)。ここにあります。xixi さん、遅延メソッドを使用して要件を完了するだけです。
これまで、NetEase Cloud Music の人気コメントを取得する方法を分析してきました。次に、クラウド ミュージックの人気曲リストのすべての曲の情報を取得する方法を分析してみましょう。
クラウドミュージックのホットソングリスト内のすべての曲の曲名と対応するID値を取得する必要があります。
上記の分析手順と同様に、図に示すように、まずホットソングリストの URL を入力します:
図に示すように、F12 を押して WEB ワークベンチに入ります:
toplist というファイル内にあります。id=3778678 の GET リクエストで、このリストのすべての曲情報が見つかりました。
リクエストに対応する情報は図に示すとおりです:
図に示すように、リクエストによって返される結果をプレビューしてみましょう:
行内に曲情報を含むコードが見つかりました図に示すように、コードの 524 は次のとおりです。
したがって、リクエストのコードから情報を含むコードをフィルタリングするだけで済みます。
ここではデータのフィルタリングに正規表現を使用します。
特徴を観察することで、2 つの正規表現フィルターを通じて必要な曲情報を抽出できます。
最初の正規表現では、リクエストによって返されたすべてのコードからコードの 525 行目を抽出しました。
最初の正規表現は次のとおりです:
<ul class="f-hide"> <li> <a href="/song\?id=\d*?" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >.*</a> </li> </ul>
2 番目の正規表現では、行 524 で必要な曲情報を抽出します。曲のタイトルと ID が必要で、対応する正規表現は次のとおりです:
Get曲のタイトル:
<li><a href="/song\?id=\d*?" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.*?)</a></li>
曲 ID を取得:
<li><a href="/song\?id=(\d*?)" rel="external nofollow" rel="external nofollow" >.*?</a></li>
この時点で、プロセス全体を分析しました。具体的な詳細を確認するためにコードに行きましょう~~
コードは次のとおりです:
コードを実行した結果は次のとおりです:
Web ページ上の曲「If I Love You」の曲レビューと保存した曲レビューを比較します:
情報は正しいです~
概要
以上がPython3 は NetEase Cloud Music の人気コメント分析をキャプチャするクローラーを実装します (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。