页面如下
通过网络流分析,找到了我们需要找的文件
而通过下图能够得到对应的json格式的页面
然后就可以进行爬取了
import requests
import json
import time
import csv
def parse_url(html):
try:
#加载json字符串
reply_data = json.loads(html)
except:
print("error")
commentlist = []
hlist = []
hlist.append("序号")
hlist.append("名字")
hlist.append("性别")
hlist.append("时间")
hlist.append("评论")
hlist.append("点赞数")
hlist.append("回复数")
#获取数据
num_video = len(reply_data["data"]["list"]["vlist"])
for i in range(num_video):
video = reply_data["data"]["list"]["vlist"][i]
#print(comment)
rlist = []
comment_num = str(video["comment"]) #评论数
ctime = str(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(video['created']))) #发表时间
time_length = str(video["length"]) #视频长度
play = str(video["play"]) #播放量
video_review = str(video["video_review"]) #弹幕数
title = str(video["title"]) #标题
#写入
writer.writerow([ctime,title,time_length,play,comment_num,video_review])
def fetch(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
try:
res = requests.get(url,headers = headers)
html = res.text
return html
except:
print("error")
if __name__ == "__main__":
file = open("video.csv","a",encoding="utf-8",newline="")
writer = csv.writer(file)
for page in range(1,11):
#动态生成链接
url_ = "https://api.bilibili.com/x/space/arc/search?mid=250858633&tid=0&ps=30&pn={page}"
url = url_.format(page = page)
#获取对应的json字符串
html = fetch(url)
#获取相关数据
parse_url(html)
#每爬取5个页面睡眠1秒
if(page % 5 == 0):
time.sleep(1)
file.close()
最终结果如下所示:
之后就可以对播放量,弹幕数量,评论数等等做排行了,包括可以做线性分析,通过设置变量以及噪声,从而找到播放量,评论数和弹幕数之间的近似的线性关系