1.數據抓取
數據集的獲取是我們進行數據分析的第一步。現在獲取數據的主要途徑一般為:現成數據;自己寫爬蟲去爬取數據;使用現有的爬蟲工具爬取所需內容,保存到數據庫,或以文件的形式保存到本地。
博主用的是用自己編寫的爬蟲代碼獲得數據。(爬蟲源代碼可以找博主要,在評論區回復即可)
爬蟲的設計思路
1.首先確定需要爬取網頁URL地址
2.通過HTTP/HTTPS協議來獲取相應的HTML頁面
3.提取HTML頁面里有用的數據
a.如果是需要的數據就保存起來
b.如果是頁面里的其他URL,那就繼續執行第二步。
爬蟲基本流程
發起請求
通過HTTP庫向目標站點發起請求,就是發送一個Request,請求可以包含額外的header等信息,等待服務器的響應
獲取響應內容
如果服務器正常響應,會得到一個Reponse,Reponse的內容便是所要獲取的頁面內容,類型可能有HTML,json字符串,二進制數據(如圖片視頻)等類型。
解析內容
得到的內容可能是HTML,可以用正則表達式,網頁解析庫進行解析,可能是json,可以直接轉為JSON解析對象解析,可能是二進制數據,可以做保存或者進一步處理。
保存數據
保存的形式多種多樣,可以保存成文本,也可以保存到數據庫,或者保存特定格式文件
反爬蟲機制與對策
1 通過分析用戶請求的Headers信息進行反爬蟲。網站中應用的最多
2通過驗證用戶行為進行反爬蟲,不如通過判斷同一個ip在短時間內是否頻繁訪問對應網站等進行分析。
3通過動態頁面增加爬取的難度,達到反爬蟲目的。
對策
1 在爬蟲中構造這些用戶請求的headers信息,以此將爬蟲偽裝成瀏覽器
2 使用代理服務器並經常切換代理服務器方式,一般就能夠攻克限制。
3.利用一些軟件,比如selenium+phantomJS就可以攻克
反爬蟲的手段 :user-agent、代理、驗證碼、動態數據加載、加密數據
數據的選擇與處理
1 網頁文本 如HTML文檔 json格式文本
2.圖片 獲取到的是二進制文件保存為圖片格式
3.視頻 獲取的二進制文件保存為視頻格式即可
4.其他 只要能請求到的,都能獲取
解析方式
1 直接處理
2 json解析
3 正則表達式
4 BeautifulSoup
5 PyQuery
6 XPath
2.數據清洗
數據得到手,我們就需要對我們爬取的數據進行清洗工作,為之后的數據分析做鋪墊,如果清洗的不到位勢必會對之后的數據分析造成影響。
下文將從數據格式統一、空值處理。
格式統一
去掉數據的空格中
在用爬蟲進行數據爬取時用strip()對爬取的字符串進行處理
將中文數據轉換為阿拉伯數字
例如1.7萬變成17000,代碼如下
def get_int(s): if s[-1]=="萬": s=s[0:-1] s=int(float(s)*10000) else: s=int(s) return s
遠行結果如下
if __name__ == '__main__': s="1.2萬" price = get_int(s) print(price)#12000
空值處理
用爬蟲對數據爬取的時候,若爬取的值不存在會報錯,用異常處理語句try{}except:pass(try為爬取視頻信息的代碼),跳過不存在的視頻信息數據。
try: html=requests.get(Link).text doc=BeautifulSoup(html); List=doc.find('div',{'class':'ops'}).findAll('span') like=List[0].text.strip()#點贊 like=self.getint(like) coin=List[1].text.strip()#投幣 coin=self.getint(coin) collection=List[2].text.strip()#收藏 collection=self.getint(collection) print('點贊',like) print('投幣',coin) print('收藏',collection) # #將數據 拼合成字典 data={ 'Title':Title, 'link':Link, 'Up':Up, 'Play':Play, 'Like':like, 'Coin':coin, 'Collection':collection, } # 存儲到csv文件 self.write_dictionary_to_csv(data,'blibli2.csv') pass except: pass
3.數據分析及可視化
表格參數信息如圖
對視頻排放量進行分析
對B站熱門播放量進行分析,對2020年熱門視頻的播放量分為4個等級
一千萬排放量以上為一個等級
五百萬到一千萬播放量為一個等級
五百萬到一百萬播放量為一個等級
一百萬播放量以下為一個等級
l1=len(data[data['Play'] >= 10000000]) l2=len(data[(data['Play'] < 10000000) & (data['Play'] >=5000000)]) l3=len(data[(data['Play'] < 5000000) & (data['Play'] >=1000000)]) l4=len(data[data['Play'] < 1000000])
再數據通過matplotlib庫進行可視化。得到下圖。
plt.figure(figsize=(9,13)) #調節圖形大小 labels = ['大於一千萬','一千萬到五百萬','五百萬到一百萬','小於一百萬'] #定義標簽 sizes = [l1, l2, l3, l4] #每塊值 colors = ['green', 'yellow', 'blue', 'red'] #每塊顏色定義 explode = (0,0,0,0) #將某一塊分割出來,值越大分割出的間隙越大 # 中文亂碼和坐標軸負號處理 plt.rcParams['font.sans-serif'] = ['KaiTi'] plt.rcParams['axes.unicode_minus'] = False patches,text1,text2 = plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct = '%3.2f%%', #數值保留固定小數位 shadow = False, #無陰影設置 startangle =90, #逆時針起始角度設置 pctdistance = 0.6) #數值距圓心半徑倍數距離 #patches餅圖的返回值,texts1餅圖外label的文本,texts2餅圖內部的文本 # x,y軸刻度設置一致,保證餅圖為圓形 plt.axis('equal') plt.title("B站熱門播放量分布圖") plt.legend() # 右上角顯示 plt.show()
從圖中可以看出,在B站能上每周必看熱門推薦的視頻播放量大部分在五百萬到一百萬播放量,低於一百萬播放量的視頻很難上每周必看熱門推薦,而一年中播放量達到於一千萬的視頻也很少。
讓我們一起看看播放量排名前10的視頻是那些好看的視頻.
data.nlargest(10,columns='Play')
再數據通過matplotlib庫進行可視化。得到下圖。
從圖中可以看出嗶哩嗶哩拜年祭最受歡迎且播放量遠遠高於其它視頻,說明B站2020年拜年祭節目進行的比較成功。
對作者進行分析
通過數據分析看那個作者的作品上熱門次數最多,從而判斷那個作者在2020年中最受歡迎。
對作者進行划分,統計出現的次數
d2=data.loc[:,'Up'].value_counts() d2=d2.head(10)
再數據通過matplotlib庫進行可視化。得到下圖。
d2.plot.bar(figsize = (10,8),title='UP top 10') plt.show()
說明B站上每周熱門次數最多的作者是涼風Kaze,一年52周熱門推薦,一共出現了48次,幾乎每周熱門都有他的視頻出現。從數據來看,2020年最受歡迎的作者是涼風Kaze。
對視頻參數分析
對熱門視頻的點贊,投幣,收藏平均比例進行分析
data['點贊比例'] = data['Like'] /data['Play'] data['投幣比例'] = data['Coin'] /data['Play'] data['收藏比例'] = data['Collection'] /data['Play'] d3=data.iloc[:,8:11] d3=d3.mean()
再數據通過matplotlib庫進行可視化。得到下圖。
d3.plot.bar(figsize = (10,8))
plt.show()
2020年中點贊比例最高,達到大約9%。說明在B站看視頻的人,平均10個人中才會有一個人點贊。而平均平均20個人中才會有一個人對視頻進行投幣。
對標題進行分析
對標題高頻次進行提取,看那類標題比較受歡迎
首先對所有標題進行遍歷,儲存在字符串s中
d4=data['Title'] s='' for i in d4: s=s+i
然后用詞雲進行可視化
標題中帶有“朱一旦,半佛,羅翔”等作者名或“英雄聯盟,原神”等游戲熱門視頻比較多。