1. Explorez la liste montante du chien cool, transformez le chanteur et sa chanson et sa durée en tableau
Idée: explorer et analyser les informations de la page, créer un tableau Excel
Difficultés techniques: analyser le code source
二 .1.url = https://www.kugou.com/yy/rank/home/1-6666.html?from=rank
2. Recherchez les balises correspondant au chanteur, au nom et à la durée du morceau dans le code source et utilisez find_all pour parcourir
Trois 1: Code:
from bs4 import BeautifulSoup import request demandes import time import xlwt # 创建 Excel 存储 数据 class Spider: def __init__ (self): self.workbook, self.worksheet = self.create_excel () self.nums = 1 def create_excel (self): workbook = xlwt.Workbook (encoding = ' utf-8 ' ) feuille = workbook.add_sheet ( ' Sheet1 ' ) titre = [ ' Rang ' ' artiste et titre ' ' temps de jeu ' ] pour index, title_data dans l'enumerate (titre): worksheet.write (0, index, title_data) retourner le classeur, la feuille de travail DEF get_html (auto, URL): têtes = { ' Mozilla / 5.0 (Windows NT 10.0, le WOW64) AppleWebKit / 537,36 (KHTML, comme le Gecko) Chrome / Safari 78.0.3904.108 / 537,36 ' } # - tête demande crawler réponse = requests.get (URL) SI response.status_code == 200 est : #Si la valeur de l'état de la demande est 200, sortie retour response.text l'autre : retour ' anormale ' DEF get_data (Self, HTML): soupe = le BeautifulSoup (HTML, ' lxml ' ) # avec bibliothèque BeautifulSuop analyse la page se classe = soup.find_all ( ' durée ' , le class_ = " pc_temp_num " ) # rang des noms = soup.find_all ( ' A ' , class_ = " pc_temp_songname " ) # chanteur et chanson fois = (soup.find_all' Span ' , le class_ = " pc_temp_time " ) # temps jeu # informations d' impression pour R & lt, n-, T dans ZIP (rangs, noms, Times): # fonction ZIP est utilisé R & lt r.get_text = () Remplacer (. ' \ N ' , '' ) .replace ( ' \ t ' , '' ) .replace ( ' \ r ' , '' ) n = n.get_text () t = t.get_text (). replace ( ' \ n ' ,'' ) .replace ( ' \ t ' , '' ) .replace ( ' \ r ' , '' ) data = { ' 排名' : r, ' 歌名 - 歌手' : n, ' 播放 时间' : t} self.worksheet.write (self.nums, 0, str (r)) self.worksheet.write (self.nums, 1 , str (n)) self.worksheet.write (self.nums, 2 , str (t) ) self.nums + = 1 def main (self,): urls = [ ' Https://www.kugou.com/yy/rank/home/1-6666.html?from=rank ' .format (STR (I)) pour I dans Range (. 1, 24)] # boucle pour URL dans les URL: Imprimer (URL) HTML = self.get_html (URL) self.get_data (HTML) (le time.sleep . 1) # pause lS self.workbook.save ( ' DATA.XLS ' ) # après tout le stockage d'informations stockées Pour data.xls si __name__ == ' __main__ ' : #Le programme principal main () spider = Spider () spider.main () est appelé lorsque le programme est exécuté
Résultat de sortie:
Formulaire Excel correspondant:
2. Nettoyez et traitez les données: (1) Il n'y a pas de lignes et de colonnes non valides dans le tableau, ignorez cette étape.
(2) Traitement de la valeur en double
importer des pandas en tant que pd biaosheng = pd.DataFrame (pd.read_excel ( ' data.xls ' )) biaosheng.duplicated ()
Le résultat:
Parce qu'il existe des valeurs en double, utilisez la méthode drop_duplicates pour supprimer les valeurs en double
importer des pandas en tant que pd biaosheng = pd.DataFrame (pd.read_excel ( ' data.xls ' )) biaosheng = biaosheng.drop_duplicates () biaosheng
Le résultat:
(3) Il n'y a pas de valeur nulle ou de valeur manquante, ignorez cette étape
(4) Traitement de valeur nulle (le format est cohérent, aucun espace n'affecte les données, ignorez cette étape)
(5) Traitement des valeurs aberrantes (chansons de longueur similaire, sautez cette étape)
3. Analyse de texte (ne sera pas)
4. Analyse et visualisation des données: en raison de trop de données, les cinq premiers de la liste sont analysés ici. Analyser la relation entre la durée des chansons chantées par les cinq meilleurs chanteurs (indiquée en secondes) et le classement, qui se reflète sous la forme d'un histogramme
import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.family']=['sans-serif'] plt.rcParams['font.sans-serif']=['SimHei'] plt.bar([346,235,189,242,250],[1,2,3,4,5]) plt.legend() plt.show()
Le résultat:
5. Analyser le coefficient de corrélation
importez les pandas sous forme de pd importez scipy.stats sous forme de stats x = [346,235,189,242,250 ] y = [1,2,3,4,5 ] stats.pearsonr (x, y)
Résultat: le premier nombre ici est le coefficient de corrélation.
Dessin
importer seaborn en tant que sns biaosheng = pd.DataFrame (pd.read_excel ( ' data.xls ' )) sns.regplot (biaosheng.play time, biaosheng.rank)
Le résultat:
6. Persistance des données (non apprise)
4.1 Il n'y a pas de lien particulier entre la durée du morceau et le classement.
2. Cette analyse de données intègre l'analyse de données python. Visualisation de données python. Robot d'indexation Web et d'autres parties, avec plus de contenu, car il n'est pas qualifié, vous devez tourner le livre pour terminer cette tâche, et il existe de nombreuses parties du livre qui ne sont pas Oui, je cherche sur Baidu depuis longtemps pour savoir comment utiliser le code pour réaliser certaines fonctions. Après cet exercice, je comprends la nature ésotérique du python. Je travaillerai plus dur pour apprendre le python et essayer de me rendre plus fort.