欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬取华农兄弟哔哩哔哩所有视频信息

程序员文章站 2022-04-14 16:43:46
...

页面如下

爬取华农兄弟哔哩哔哩所有视频信息

通过网络流分析,找到了我们需要找的文件

爬取华农兄弟哔哩哔哩所有视频信息

而通过下图能够得到对应的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("回复数")
    #获取数据
    for i in range(20):
        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")
    writer = csv.writer(file)
    writer.writerow(['发布时间','标题','长度','播放量','评论数','弹幕数'])
    
    for page in range(1,10):
        #动态生成链接
        url_ = "https://api.bilibili.com/x/space/arc/search?mid=250858633&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()

最终结果如下所示:

爬取华农兄弟哔哩哔哩所有视频信息

之后就可以对播放量,弹幕数量,评论数等等做排行了,包括可以做线性分析,通过设置变量以及噪声,从而找到播放量,评论数和弹幕数之间的近似的线性关系