magasin de musique Crawling nuage Netease vingt mille commentaires sur le serveur MySQL

magasin de musique Crawling nuage Netease vingt mille commentaires sur le serveur MySQL

En stage récent, jetez un oeil à quelqu'un d'autre blog ennuyé, a trouvé généralement apprendre à écrire un blog est une bonne façon d'apprendre, journal généralement économiser une partie de votre propre code écrit, étagé sur la mauvaise fosse rencontré viennent aussi partager aussi peuvent aussi aider les autres à apprendre, et si un mauvais endroit pour écrire trop ragots qui s'il vous plaît pardonnez-moi, ceci est mon premier blog, venez à la question ci-dessous !:

J'ai utilisé le compilateur est 2018 PyCharm
Python 3.6.0
est nécessaire pour que les bibliothèques
demandes
de
bs4.BeautifulSoup
ne pas dire que ce sont sous le commandement direct des reptiles scientifiques bibliothèque de base n'a pas installé le pépin de ligne installer veut installer
il une bibliothèque supplémentaire aussi poser beaucoup de stands , uniquement pour trouver la place de la méthode d'installation que
nous avons appris crawler fait est pas l'analyse finale des données afin d'analyser les données nécessaires pour installer les données doivent avoir un conteneur est pas,
j'utiliser l'acheter leur propre serveur cloud Tencent (pas de publicité) les étudiants inscrits à l' acheter relativement pas cher,
j'acheter un serveur --Ubuntu système Linux, ils peuvent construire une bonne connexion de transformation avec python sur son propre service de base de données construite sur elle, je l' utilise ici un serveur MySQL
Ubuntu est également très facile à installer directement sous deux commandes pour obtenir
$ sudo apt-get install mysql serveur

$ Sudo apt-get install mysql client
et en raison de l'influence de l'auteur dans cet espace ne faites pas trop pour expliquer il y a de nombreux tutoriels en ligne Les étudiants intéressés peuvent aller voir

Construire un bon environnement alors nous allons commencer à travailler
, et donc il y a une importante bibliothèque est une bibliothèque qui n'est pas installé mentionné précédemment pour connecter vos propres services de MySQL que
je utilise est PyMysqlDB essayé beaucoup de trouver cette bibliothèque comparaison utile l'
installation est très simple
pépin installation PyMsqlDB

première bibliothèque d'importation nécessaire

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

Let look, ouvrant la musique nuage NetEase de cette musique nuage planait pages liste que
nous pouvons trouver sur cette page ont 100 chansons
et puis avec désinvolture des points pour ouvrir une ,
étape 1
nous avons observé plusieurs multi-points pour ouvrir son URL, l'URL trouver là une loi qui est devant elle sont les mêmes , mais id = chaîne de chiffres à l'arrière de ce changement, qui est son identifiant de la chanson qui est ce que nous avons d' abord besoin de trouver.
Appuyez sur F12 de votre clavier pour actualiser la page ,
nous regardons la page source
étape 2

le code

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

Note :! ! ! ! ! !
Je ne sais pas de bons enfants de la vue n'ont pas trouvé l'URL de l'auteur « https://music.163.com/#/discover/toplist?id=19723756 milieu » « # » est enlevé c'est le nuage NetEase joue un petit truc, ne retirez pas la réponse n'est pas retourné les informations dont nous avions besoin

Cela nous permet d'extraire d'un [[1- nom de la chanson, chanson 1-id, 1- nom de chanteur, chanteur 1-id], [2 nom de la chanson, la chanson 2-id, 2- nom de chanteur, chanteur 2-id ], ················] une liste de formats de
bonnes chansons comme celui - ci mettent l'id sur l'utilisation de ces trouvé go identifiant des configurations suivantes et obtenir la réponse que
nous ouvrons l'URL dans la découverte de la structure qui est ce que nous recherchons page chansons, la première étape que nous réussirons ,
nous allons à nouveau analysés pour noter ces pages de musique où?
Appuyez sur F12, ou
dans le désordre pour vous d'arrêter pour trouver les informations dont nous avons besoin d' une compétence, ne vont pas à l' aveuglette, nous analysons:
glisser vers le bas , nous avons trouvé dans les commentaires, nous signalons la deuxième page changé sa lettre de commentaires, mais il n'a pas changé l'URL nous pouvons venir à cette page utilisée est chargé de manière asynchrone, nous sommes allés à l' intérieur du XHR correspondant
étape 1
étape 2
de ce qui précède , nous pouvons voir que la demande est une demande après, il il y a deux paramètres Parmas et encSecKey deux paramètres. Du sens littéral des mots que nous pouvons savoir que le premier paramètre (apparemment crypté) Le second paramètre est utilisé pour le déchiffrement.
Il est un cryptage AES ou un mode CBC, actualisez la page peut être trouvée par les deux paramètres peuvent être modifiés.
Que c'est la clé de chiffrement 16 bits est généré au hasard, il est produit par le dos de JavaScript, des tutoriels en ligne sur la façon de se fissurer. Heureusement, les tentatives de l'auteur de le trouver à travers une paire de chansons pour d'autres paramètres correspondant au nombre de pages de commentaires est le même travail, il est donc simple, juste être un peu dur, mais je peux copier le code, mon approche est un point vers une ouverture aux commentaires douze d'entre eux correspondant à un groupe de paramètres constituent la liste, vous pouvez analyser toutes les chansons avant douze ans a commenté, douze déjà beaucoup a un total de 20 commentaires par page 100 chansons. Ensuite, nous pouvons obtenir 20 * 12 * 100 = 24000 commenté. Remarque: Assurez-vous de définir l'adresse IP proxy sinon bloqué IP est très gênant, le débutant auteur quand il a été fermé aussi.

Voici mon code complet

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)

L'ensemble du programme RAN environ 30 minutes ,
nous avons vu Navicat connexion Premium pour le serveur de données MySQL a été enregistré
Nuage de mots 1
ci - dessous txt fichier généré par l'exportation
J'utilise le dernier site de générateur de nuage de mot pour générer un nuage deux mots
site https://wordcloud.timdream.org /
Voici le plan fini:
Nuage de mots 2
Rédiger des images décrites ici
jusqu'à ha ha ha mots semblent être comme vous l' obtenez?
Le premier à écrire blog à cette fin, nous nous réjouissons de vos questions.


Publié 27 articles originaux · louange gagné 62 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/qq_42359956/article/details/81228337
conseillé
Classement