クロール網易クラウドミュージックストアMySQLサーバ上の2万コメント

クロール網易クラウドミュージックストアMySQLサーバ上の2万コメント

最近のインターンシップでは、他の誰かのを見てみるが退屈ブログ、通常のブログを書いて学ぶ学ぶための良い方法である、新聞は通常、ダウン書かれた独自のコードの一部の保存、あまりにも共有して来るも遭遇間違ったピットを踏んでいまた、ヘルプ他の人が学ぶために、そして悪い場所はご容赦くださいことをあまりにも多くのゴシップを書き込むことがあれば、これは、私の最初のブログであることができ、以下の質問に来ます!:

私は2018 PyCharmされるコンパイラを使用
のPython 3.6.0は、
ライブラリが要求される
要求
JSON
bs4.BeautifulSoupを
ラインピップは、それがインストールしたいインストールインストールしていない、これらは基本的な図書館学の爬虫類の直接の指揮下にあると言う必要はありません
が追加のライブラリだけインストール方法の場所を見つけるためにピットの多くを置く
、我々はクローラがやっている学んだが、データがコンテナがそれではない持っている必要がありますインストールするために必要なデータを分析するために、最終的なデータ分析ではありません
、私は自分自身を買って使いますテンセントクラウド比較的安価にそれを購入するために登録されているサーバー(広告ではない)の学生、
私は、Linuxシステム--Ubuntuサーバーを購入し、彼らはそれの上に構築された独自のデータベースサービス上でのpythonとの良好な変換接続を構築することができ、私はここに使用-サーバのMySQL
のUbuntuは、取得するために、2つのコマンドの下に直接インストールすることは非常に簡単でもある
$ sudoのはmysql-インストールapt-getのサーバーを

$須藤はapt-getのはmysql-インストールクライアント
興味のある学生が行くと見ることができる多くのオンラインチュートリアルがあります説明するために、あまり行わないため、この空間での著者の影響で、その後とを

私たちが作業を開始します、その後の良好な環境を構築し
、そのための重要なライブラリがあることは以前に、独自のMySQLサービスを接続するための言及インストールされていないライブラリである
私の使用がPyMysqlDBこのライブラリに有用比較多くの検索を試してみましたです
インストールは非常に簡単です
PIPがPyMsqlDBをインストール

必要に応じて最初のインポートライブラリ

import requests
from bs4 import BeautifulSoup
import json
from pymysql import *

この雲の音楽の網易のクラウド音楽を開いて見てみましょうが、リストページ急増し
、我々はこのページで見つけることができる100曲持って
開くようにして、気軽にポイントを
ステップ1
私たちはそのURLを開くには、いくつかのマルチポイントを観測し、urlはそれを見つけるだろうがその前にある法律は見つけるための私たち最初に必要であるその曲のIDです。この変更の裏、の数字と同じですが、id =文字列です。
ページリフレッシュするには、キーボードのF12キーを押して
、我々はページのソースを見て
ステップ2

コード

def find_music_id():
    url = 'https://music.163.com/discover/toplist?id=19723756'
    response=requests.get(url=url,headers=headers,proxies=proxies)
    # print(response.text)
    soup=BeautifulSoup(response.text,'html.parser')
    soup_=soup.find('textarea',attrs={"id":"song-list-pre-data"})
    json_=json.loads(soup_.string)
    #列表生成器 0 歌曲名字  1歌曲id  2歌手姓名  3歌手id

    music_infomation_list=[[each['name'],each['id'],each['artists'][0]['name'],each['artists'][0]['id']] for each in json_]
    return music_infomation_list

注:!
私は良い視力の子供たちは「著者のURLを発見していないかわからないhttps://music.163.com/#/discover/toplist?id=19723756、」中央の「#」は、これは少しトリックをプレイ網易クラウドで削除されます返却されていない、我々は必要な情報を応答を削除しないでください

これは、私たちは[[1-ソング名、歌1-ID、1-歌手名、歌手1-ID]、[2-ソング名、歌2-ID、2-歌手名、歌手2-IDのうち抽出することができ]、················】このような形式のリスト
このような良い曲がこれらの使用上のIDを入れるには、以下のような構成のURLのid行くを発見し、応答を取得し
、我々は構造の発見にURLを開きます私たちは歌のページ探しているものであること、最初のステップは、我々は成功するだろう
我々は再びどここの曲のページを評価するために分析行きますか?
プレスF12、またはとして
:混乱であなたは私たちに必要な情報を見つけるためにで停止するためには、盲目的に、私たちは分析し、行っていない、スキルです
スライディング我々はコメント欄でそれを発見したダウン、我々は2ページ目を向けますそのコメント・レターを変更しましたが、彼は我々が使用し、このページに来ることができるURLを非同期にロードされている変更されていない、我々は対応するXHR中に入った
ステップ1
ステップ2
ことは、私たちは要求がポストの要求であることがわかります上から2つのパラメータparmasとencSecKey 2つのパラメータがあります。言葉の文字通りの意味から、我々は最初のパラメータ(明らかに暗号化された)二番目のパラメータは、復号化に使用されていることを知ることができます。
これは、AES暗号化やCBCモードで、ページを更新変更することができる2つのパラメータによって見つけることができます。
それの16ビットの暗号化キーがランダムに生成されていること、それはJavaScriptの、クラックする方法についてのオンラインチュートリアルのバックによって生成されます。幸いなことに、コメントのページ数に対応した他のパラメータのための歌のペアを通じて彼を見つけるために、著者の試みは、同じ仕事なので、それはちょっと難しいかも、シンプルですが、私は、コードをコピーすることができ、私のアプローチは、オープンAへのポイントでありますパラメータの束に対応するそれらの12のリストを構成するコメントに、そしてあなたは12のコメントの前にすべての曲をクロールすることができ、12すでに多くは100ページあたり20件のコメントの合計を持っています曲。その後、我々はコメント20 * 12 * 100 = 24000を得ることができます。注:それはあまりにも閉鎖されたときにプロキシIPがそうでなければ、IPは非常に面倒である著者の初心者をブロック設定してください。

ここに私の完全なコードです

import requests
from bs4 import BeautifulSoup
import json
from pymysql import *


headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        'referer': 'http://music.163.com/song?id=531051217'
    }

proxies= {
            'http:':'http://121.232.146.184',
            'https:':'https://144.255.48.197'
        }
#参数数列:
list_=[{'params':'fFwKOLCh6Of8DfuJu/xO6KvRI1H+9tmINTKFD10skuLFoz8QJCvor4B3UwXJRb9OIN4QF801e97Dpgw/GeqSB65XL9UJwuAIiiRgMBVD/JY0pn3kdO+MIddQfp7fwre5c7bC3iX2dfjww27fSttPzj3kvKmboQYQ357zFEhuBApdZT1a3d3dZWrKxC5kgxz2',
    'encSecKey':'66964a41d5496d739dd44b669170e3c01d7712a6cdea58537b0b6c3ff014225a7da72217a0afcd030f9cdcdd0b003776b3ed45d87bb1bc13a648f8347967c75bb9b1cdd46a6eed66fccf1f563d5432b2532c7018044e4c1edee38d31d07eddc223d8962b8fb6dc441dcaef7f155be7d26cea7c6dc4ec185499e28ce5af2e6cf9'}
    ,{'params': 'AsqmuHagH70XgDIIQ/3hlUb0coSdfEMYH3u/VSyyPVHFfNeG2D+bttf362ZkfebPZWnIXNfVxx0jqnoRIwRwSvOlWrg6QhYYQhbtvymw3RYScCz2HMqdgVIUrG2fNDCEf6CBUW2Pq61z2KOglot/ZmApJyvf3TSAheVCGkdP6zEpJz1V1w55gAsWY4Yo5mIQ',
    'encSecKey': 'd0b151456d203290e492aa10a659da9e17538759f153cbfa00a08d0314b507c1052bd89a7f3aa7618b22e1c9313c29c4ad262408cfc2b6b6c30be0e8fae53bd4a670958b9d6178cb21b80e6999eff1294406c127f95d2dcfc0abddb1fb4c09776d59342368c7d781931d4d25f49f81c1d740cf423ed3d8ed27eaeaa5f93637c3'}
    ,{'params':'kJ/IBkTmVGEcB/K+hh874RI+Qzt9M1br5MKr37klZs+yJlAKZ3OSSBIZ+m/4d7sYUgpdV66MZz4nsh+G5NZXYP0ZJKr0jpDmNdKvCRlSC2X6XTOCcpPxp7nc0D4JwKKslaR3PYBQZ+ouZMLnLXtq6n8eSfy76/u4lIjf317gpydtnbPDH+A9FZTc2mz4HUSZ',
     'encSecKey':'c5847af817949d090bce0d9ea5d87417ba2f5b5e7f5720d9cf89502578c46fbe0d1e2bd54505474ccd85216f1a779b518421db089e9fe15069fb1a515b5e490595c8281875b2d6f6899f5c68497791c9b319acf4719405d3ba340e020a04a9462d468fd3aaf469b2162483257832f4e183775b4027c77a35591049a95e6c39a9'}
    ,{'params':'vm2gK32ScSwG9Fs/TnXrFVKZynm+9eh8hDKAx4E4NDeadmKm6CdQRDPdbfzCJx+hbnl4hvgnPfK7ZhNVxaqY5SXy2qGKJInr71NH+pmn/+e1p9qy012BFtQ9xV3tkIlF4MXWU2YWZyMg8Eu3FIsUBdY6biOx578WoGvzJ55+HJObLzj3rbgb3k6OLrZNP/y2',
    'encSecKey':'667d120cc8a3dc2095d60e7e9815d37695a5068ab62eac2c20353eab32b21acf4e6d7d2d42e92de3a29644428a6394d14f76806bf97e97a37bb5db0d9f9c349da00cc7638cc22854b52aacecc87d271f02d19dbd48ae090f19081d55a799a79b887d8491d44ee2768a35dc485a939f71ebf5d88b79144343330d3a5b117b53d0'}
    ,{'params':'30av5BW730ZckJWObL8qTZhBCrWx9BdSCWeKMixJUoi5zLmOwDfbmFhGqQFw7OaKQy1GNsO0HZsW+39mYitEiSMQ1aIuCkUS9DZzSXOlWWVrwnwF5i2JVgZKnJeTXvl9FaPjkVLgDE7L3l+KtRsr78bpTiZoaGDCuUF7PKt1T4VcxVvVlvRjiFoRDId1IbjB',
    'encSecKey':'5c26c47d9f5384418b38363d03aac34fffd0e1ae0fff078d2306d02adbbfc75c9b91df06ed8d20dc396a8ac724694a6ea308b25cd5f33d8952066a4b320d21277f0e7d3bc362e1b7c8a85806c262b7cefe91a73b5e3f950724ff25244d5549c42161fa310ee6981db79bafd6fc12722e57a3fad6473df586476c8a30e4546313'}
    ,{'params':'Z6PSkHi+hdy7GKMlIoM3elcE1dxIFLOtRVaglUoUthBsN4AADHro9u94peAfdFcPu89E3xOdCw9dC3nkS4KuSzatUTFZXTXLLVMLaqSG8Z9AxUrW28PdewxCLxjSRfHxSUuJSyWnGAY67dHnMW3VMDuisoLNMHw6A/s0+BbaNXq1B3ms2YhHUhh7FH8NVXXF',
    'encSecKey':'24c782a81a23f945a383d742427eebcfc591ac8b630d5df92770e6e6b7bd8552cbe81c1fde5cf6aea4b892f5e49bcf0df4180de00e85eee72bc16ed1b548317d22f485808307c206c5582397ec1525014bbed357de4e361bf65ad71741d3ca77aed0e7dbdb7f5b33b42177cff11f77295cb8f8412c2e56e181aceda7b3fe57a6'}
    ,{'params':'Cqn1pyh7Q+wFBJK5ul8K6fbIfUNNX8/7k2+8eeJKyJ7/FfiGBmn25AhzesJPLVI4w/7DT7EQXQVweG3g5OBr/RFRZ+59TEDYMSCGIaH1Z3hHZoz+2qqugwHL4igLZe9EHj8/vhIdJSG+PY3+NJ73828tY1FqsDE2neyCHdiSMU0mdh0WJrAtRFv8FxU26Imi',
      'encSecKey':'00f979b1b86e6e3486131077042b4d077410afe7cb08fc5c87beee256641a42de7f07fa84dd9bb6e4d7dc328643e386b40e8dd8f2d43f6cff3f101f97bb85415983bc140e747b137ac3389316b6f729418c2a4d82784ed4dac7d9c67075ccf49105371460368f102c210d8d48c39a28640f6ce52506836b893b7217eb7321158'}
    ,{'params':'BSB3Gz2LxseInLgIyjVdZlj2VIiwI8gk0RzaeD+5zLOY1CNEmeDzBkHgr1JxvVgsJEbLKOSnFd/eqr/fTNCYaaB85KX7FHkpPD9marAej/h8JChVHuJctCtdWE6OKMrw1ZSMjj1rJaK/9Y76QQdUFqKq6bmo/xgxdizL9tPavvFI/MrZRQpXCHEGoD8duIPg',
      'encSecKey':'3199e64ea5e372b1a089fa80a3f9f137ebb4dfa6fea32c37934f090d26822d91ad90a5b1dcfccd110f53255ced94ab484fb80760ff14812cb4bb7347afd318d9bcfb869fa2846fcacc5b214cf8c876b81932a25db9fd66fbb5839d67bc9c81eef1f20d20021e601d85c81f7fbd590ad34b34a39c27e0b50fd989a5fe560b6d9e'}
    ,{'params':'IwT4sXv53h06Z3d1zOKCF6gya78yKAPMKqv8Tt+7W4FE3+hne2Y5ai2gKBkoNVLJjGZgAcGg14vDeNWVxUay79fLvnnvM4E/IzRab8I6yMUXUucD7TOo4N66OIQL1JbSXObFEdw6m55KlpXjALU9E6D7PzbwmvVc/mRDQ6T9I95OAF4QhQR1sgpZPA/NCo+F',
      'encSecKey':'6c47f3ddcd77755a266047b86eef7ca212ac59fb96d8985346e691592fba0971565ed3cb462af014901c8018a2110d0cc782d47618c308f3762387199df1e3f74e95d2a2abe174c437503931c0dd895c1b823872a87a15dc304e57739d3bf491e248799d3cc9321428bdb72c0a320948067fc987f0a2d8cc0b8009b96a32daa0'}
    ,{'params':'oSGKRyWkaCHwuuRBaJF0dR1BVu72h55s3hSBr8SEilhAnaNR+6YEaESQfN5UpSphWGg61WPrmHwHnc0CstUGgf7DM0ZMH8szY5CBtMEGY6U+Jr3sJHW/bfHQKthPRPy4RaAw2/kP04WaE7irtQ2IA7hG72NCFiLA4pehz8WZpUGrUJ1Wdt05ul1R6NyKhOUT',
      'encSecKey':'13e520923caae3584dc5cd1246fe7368bfd424c2652fe87027f7d70144ad67cbde42e7ef82a89f2624ccfb55a425531f4c4974eda810a3c7beb2810af2755a21b024143bcbeced731127467d066adde57e89ca28b4d1c28365c90acaa22ca213c8b9a0fc9d3d9f746d72d2412208dcee6233854f7d5387129db54ba01633bee8'}
    ,{'params':'LOI3RIWuAkUFNbL0Lz5Lrsja1snx3cKmsAJM0sh5NWG3kVJjovySpJ4ZbozLovQu4POl7f97Ck8OROgOLyvT5cP2q2IUNx0mnWQP9NbqbCM1ecCIGODuC9aL18LUZw8/EeFJ3L03BEvpoJRoY9TS1za0XX2ZxoNG5GgDwRPA1PXU0xEnIqcQnglec7Z7VhB+',
      'encSecKey':'307be159c496283c90c2a46069ca842616391d05d66237cddf92176b621892d75669291910352281850090f352286fdf8be3d682d9f02ddf91089aaed7d8ece3de528bd56e5919e4781a3207d515089720295864b87821e51e8386522d85f3add430527c4483270832693ce02c66b1d96ac63c05dd3eca62e99276fa3749b2f4'}
    ,{'params':'TOm/fpI8KDQao4mbdI4kO7uqCnllwn/nJaIymYWdZexi7Diu2YUyCwoLf5m/wFesry2SwENlhuhFif6S/r4Wc+3pEajn3DsOMnNVQibsIwGynlE3Oah3K/FQEG5Cj8g0STOEoSQnK1wJWa5cG+Qha0YaqfFO71LP2haU6jdaTjZDixYj7xqTZVlOBIl2qEts',
      'encSecKey':'b93d6bd71b53fb3089c6f2aa2b95cc619f15c8434e5d95b98dea71185767b5efbad2362ff6fc4a75e85d5a30024ef7e4188d7014a33e9f33578ad2d909e86f421fb754c6434d893e399a49c9b64428cb49fe890a6ab791dff5ffb155708ced0cc7db74a5f332746d41ea953bbe23eed4a2a9976bfb3acaff5385ef76d98a1b67'}
    ]

def find_music_id():
    url = 'https://music.163.com/discover/toplist?id=19723756'
    response=requests.get(url=url,headers=headers,proxies=proxies)
    # print(response.text)
    soup=BeautifulSoup(response.text,'html.parser')
    soup_=soup.find('textarea',attrs={"id":"song-list-pre-data"})
    json_=json.loads(soup_.string)
    #列表生成器 0 歌曲名字  1歌曲id  2歌手姓名  3歌手id

    music_infomation_list=[[each['name'],each['id'],each['artists'][0]['name'],each['artists'][0]['id']] for each in json_]
    return music_infomation_list






def get_comments(list_music):

    count=0
    for each in list_:
        print('正在保存第%s页' % count)
        count += 1
        data = {
            "params": each['params'],
            "encSecKey": each['encSecKey']
        }

        target_url = "http://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=".format(list_music[1])
        res = requests.post(target_url, headers=headers, data=data,proxies=proxies)
        print(res.text)
        comments_json = json.loads(res.text)
        # print(comments_json)
        # print('xxxxxxx',comments_json['topComments'][0]['user']['nickname'])
        hot_comments = comments_json['comments']
        for item in hot_comments:
        #筛选评论
            try:
                cursors.execute("insert into comments values('{}','{}','{}','{}','{}');".format(list_music[1], list_music[0], list_music[3], list_music[2],item['content']))#sql语句--向表中加入数据

            except:
                #打印不合格式的评论
                print(item['content'])

#主函数
def main(music_info):
    print(music_info)
    #url = input("请输入链接地址:")
    get_comments(music_info)


if __name__ == "__main__":
    url_list=find_music_id()
    #连接你的服务器
    connect_ = connect(host='你服务器的IP', port=3306, user='你服务器下的MySQL用户名', password='用户密码', database='数据库名称',charset='utf8', autocommit=True)#True 参数表示立刻执行sql语句
    cursors = connect_.cursor()
    for each in url_list:
        main(each)

30分程度、プログラム全体のRAN
我々は、サーバーのMySQLのデータへのNavicatプレミアム接続を見たが保存されている
Wordの雲1
輸出によって生成されたTXTファイルの下に
、私は2つのワードクラウドを生成するために、サイトの最後の言葉クラウド・ジェネレータを使用する
ウェブサイトhttps://wordcloud.timdream.orgを/
ここでは、完成したマップである:
Wordの雲2
書き込み絵は、ここで説明しました
アップハッハッハへの言葉は、あなたがそれを得るようなものに見えますか?
この目的のためにブログを書く、我々はあなたの質問をお待ちしております。


公開された27元の記事 ウォン称賛62 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_42359956/article/details/81228337