爬起騰訊視頻數據的處理與分析


爬取騰訊視頻熱播榜並處理分析

 

一:網絡爬蟲設計方案

爬蟲名稱:爬取騰訊視頻熱播榜並處理分析

爬取內容:熱播榜的影視劇名稱與對應的熱度

設計方案概述:

1.需要找到要爬取的網頁,使用F12查看源代碼,找到要爬取的數據

2.然后使用get請求和beautifulsoup

3.使用pandas進行數據可視化

4.使用matplotlib進行數據分析以及回歸方程的繪制

5.最后將數據持久化

技術難點:需要找到數據之間的對應關系並進行處理分析。

1.查看源代碼后發現該網頁為html結構

並且發現所需要的數據在以下標簽中

2.利用find_all函數進行遍歷查找的方式爬取

三:爬蟲程序設計

先把我們所需要的數據爬取下來

復制代碼
復制代碼
 1 import requests
 2 from bs4 import BeautifulSoup
 3 import pandas as pd
 4 import numpy as np
 5 import scipy as sp
 6 from numpy import genfromtxt
 7 import matplotlib
 8 from pandas import DataFrame
 9 import matplotlib.pyplot as plt
10 from scipy.optimize import leastsq
11 import urllib.request as urlrequest
12 #導入相關庫
13 url='http://top.iqiyi.com/rebobang.html'
14 #搜索網址
15 headers={'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'}#偽裝爬蟲
16 #偽裝爬蟲
17 r=requests.get(url)
18 #發送get請求
19 r.encoding=r.apparent_encoding
20 #統一編碼
21 t=r.text
22 soup=BeautifulSoup(t,'lxml')
23 #使用BeautifulSoup工具解析
24 title=[]
25 count=[]
26 #建立兩個空列表
27 for x in soup.find_all(class_="title-link"):
28          title.append(x.get_text().strip())
29 for y in soup.find_all('span',class_="count"):
30          count.append(y.get_text().strip())
31 #使用find_all函數進行遍歷查找        
32 data=[title,count]
33 #把兩個列表收到data變量中
34 print(data)
35 #使用print函數打印
復制代碼
復制代碼

爬取的數據如下圖

使用pandas將其數據可視化

復制代碼
復制代碼
1 df=pd.DataFrame(data,index=["名稱","熱度"])
2 #數據可視化
3 print(df.T)
4 rebo="D:/hotbo.xlsx"
5 df.T.to_excel(rebo)
復制代碼
復制代碼

 

進行數據清洗與處理:

復制代碼
復制代碼
 1 #數據清洗
 2 print('\n====各列是否有缺失值情況如下:====')
 3 print(df.isnull()) 
 4 #統計空值情況
 5 print(df.duplicated()) 
 6 #查找重復值
 7 print(df.isna().head()) 
 8 #統計缺失值  # 得出結果為False則不為空值    
 9 print(df.describe()) 
10 #描述數據
復制代碼
復制代碼

數據清洗的結果:

進行數據分析和可視化

復制代碼
復制代碼
 1 file="D:/hotbo.xlsx"
 2 chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')
 3 df=pd.read_excel(file,names=["rank","name","hot"])
 4 #使用read函數讀取excel文件
 5 plt.rcParams['font.sans-serif']=['Arial Unicode MS']
 6 #用來正常顯示中文
 7 plt.rcParams['axes.unicode_minus']=False
 8 #用來正常顯示負號
 9 
10 #畫散點圖
11 plt.scatter(df.name,df.hot,alpha=1)
12 #畫散點圖,名字為X軸,熱度為Y軸,大小為1
13 plt.title("影視劇名稱與熱度統計值")
14 #添加標題
15 plt.grid()
16 plt.show()
17 plt.savefig(fname="D:/影視劇名稱與熱度統計值.png",figsize=[10,10])
18 #保存圖像
19 
20 #畫直方圖
21 data=np.array(df.hot)
22 Names=df.name
23 s=pd.Series(data,Names)
24 s.name='影視劇名稱與熱度統計值'
25 s.plot(kind='bar',title='影視劇名稱與熱度統計值')
26 plt.grid()
27 plt.show()
28 plt.savefig(fname="D:/影視劇名稱與熱度統計值.jpg",figsize=[1,1])
29 #保存到D盤
復制代碼
復制代碼

運行結果如下

畫散點圖和回歸直線方程

復制代碼
復制代碼
 1 #畫一元二次回歸方程
 2 chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')
 3 #調用中文
 4 plt.rcParams['font.sans-serif']=['Arial Unicode MS']
 5 plt.rcParams['axes.unicode_minus']=False
 6 filename="D:/hotbo.xlsx"
 7 colnames=["rank","name","hot"]
 8 df=pd.read_excel(filename,skiprows=1,names=colnames)
 9 X=df.rank
10 Y=df.hot
11 #確定x,y軸
12 def func(params,x):
13     a,b,c=params
14     return a*x*x+b*x+c
15 def error(params,x,y):
16     #設置誤差函數
17     return func(params,x)-y
18 p0=[1978,0]
19 def main():
20     #主函數
21     plt.figure(figsize=(8,6))
22     #畫布尺寸
23     p0=[1978,300,1]
24     Para=leastsq(error,p0,args=(X,Y))
25     a,b,c=Para[0]
26     print("a=",a,"b=",b,"c=",c)
27     plt.scatter(X,Y,color="green",label="樣本數據",linewidth=2)
28     x=np.linspace(1,25,25)
29     y=a*x*x+b*x+c
30     plt.plot(x,y,color="red",label="擬合曲線",linewidth=2)
31     #畫擬合曲線
32     plt.legend()
33     plt.title("影視劇排名與熱度統計值")
34     plt.grid()
35     plt.show()
36 main()    
37 plt.savefig(fname="D:/影視劇名稱與熱度統計值回歸方程.jpg",figsize=[1,1])
38 #保存圖像
復制代碼
復制代碼

 

運行結果如下

 

代碼:

復制代碼
復制代碼
  1 import requests
  2 from bs4 import BeautifulSoup
  3 import pandas as pd
  4 import numpy as np
  5 import scipy as sp
  6 from numpy import genfromtxt
  7 import matplotlib
  8 from pandas import DataFrame
  9 import matplotlib.pyplot as plt
 10 from scipy.optimize import leastsq
 11 import urllib.request as urlrequest
 12 #導入相關庫
 13 url='http://top.iqiyi.com/rebobang.html'
 14 #搜索網址
 15 headers={'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'}#偽裝爬蟲
 16 #偽裝爬蟲
 17 r=requests.get(url)
 18 #發送get請求
 19 r.encoding=r.apparent_encoding
 20 #統一編碼
 21 t=r.text
 22 soup=BeautifulSoup(t,'lxml')
 23 #使用BeautifulSoup工具解析
 24 title=[]
 25 count=[]
 26 #建立兩個空列表
 27 for x in soup.find_all(class_="title-link"):
 28          title.append(x.get_text().strip())
 29 for y in soup.find_all('span',class_="count"):
 30          count.append(y.get_text().strip())
 31 #使用find_all函數進行遍歷查找        
 32 data=[title,count]
 33 #把兩個列表收到data變量中
 34 print(data)
 35 #使用print函數打印
 36 df=pd.DataFrame(data,index=["名稱","熱度"])
 37 #數據可視化
 38 print(df.T)
 39 rebo="D:/hotbo.xlsx"
 40 df.T.to_excel(hotbo)
 41 file="D:/hotbo.xlsx"
 42 chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')
 43 df=pd.read_excel(file,names=["rank","name","hot"])
 44 #使用read函數讀取excel文件
 45 df.head()
 46 
 47 #數據清洗
 48 print('\n====各列是否有缺失值情況如下:====')
 49 print(df.isnull()) 
 50 #統計空值情況
 51 print(df.duplicated()) 
 52 #查找重復值
 53 print(df.isna().head()) 
 54 #統計缺失值  # 得出結果為False則不為空值    
 55 print(df.describe()) 
 56 #描述數據
 57 
 58 plt.rcParams['font.sans-serif']=['Arial Unicode MS']
 59 #用來正常顯示中文
 60 plt.rcParams['axes.unicode_minus']=False
 61 #用來正常顯示負號
 62 
 63 #畫散點圖
 64 plt.scatter(df.name,df.hot,alpha=1)
 65 #畫散點圖,名字為X軸,熱度為Y軸,大小為1
 66 plt.title("影視劇名稱與熱度統計值")
 67 #添加標題
 68 plt.grid()
 69 plt.show()
 70 plt.savefig(fname="D:/影視劇名稱與熱度統計值.png",figsize=[10,10])
 71 #保存圖像
 72 
 73 #畫直方圖
 74 data=np.array(df.hot)
 75 Names=df.name
 76 s=pd.Series(data,Names)
 77 s.name='影視劇名稱與熱度統計值'
 78 s.plot(kind='bar',title='影視劇名稱與熱度統計值')
 79 plt.grid()
 80 plt.show()
 81 plt.savefig(fname="D:/影視劇名稱與熱度統計值.jpg",figsize=[1,1])
 82 #保存到D盤
 83 
 84 #畫一元二次回歸方程
 85 chinese=matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')
 86 #調用中文
 87 plt.rcParams['font.sans-serif']=['Arial Unicode MS']
 88 plt.rcParams['axes.unicode_minus']=False
 89 filename="D:/hotbo.xlsx"
 90 colnames=["rank","name","hot"]
 91 df=pd.read_excel(filename,skiprows=1,names=colnames)
 92 X=df.rank
 93 Y=df.hot
 94 #確定x,y軸
 95 def func(params,x):
 96     a,b,c=params
 97     return a*x*x+b*x+c
 98 def error(params,x,y):
 99     #設置誤差函數
100     return func(params,x)-y
101 p0=[1978,0]
102 def main():
103     #主函數
104     plt.figure(figsize=(8,6))
105     #畫布尺寸
106     p0=[1978,300,1]
107     Para=leastsq(error,p0,args=(X,Y))
108     a,b,c=Para[0]
109     print("a=",a,"b=",b,"c=",c)
110     plt.scatter(X,Y,color="green",label="樣本數據",linewidth=2)
111     x=np.linspace(1,25,25)
112     y=a*x*x+b*x+c
113     plt.plot(x,y,color="red",label="擬合曲線",linewidth=2)
114     #畫擬合曲線
115     plt.legend()
116     plt.title("影視劇排名與熱度統計值")
117     plt.grid()
118     plt.show()
119 main()    
120 plt.savefig(fname="D:/影視劇名稱與熱度統計值回歸方程.jpg",figsize=[1,1])
121 #保存圖像
復制代碼
復制代碼

四:結論

1.通過這次分析與可視化可以看出大家對影視的喜歡方面。

2.小結:通過Python可以進行數據分析,方便生活的數據統計。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM