B站视频爬取代码阅读

Bilibili视频爬取

参考博客:ucaslilong的博客 码农家园

一 、

最近在研究网页视频的爬取,各种切片云云头都大了。有现成的工具,如you-get, 命令行调用很方便,功能也很强大,不过过于强大笼统的功能(给个url就直接扒拉下来),订制度又太低了,加上you-get在买了飞机票时和B站贴贴时会很卡,就想到网上找些别的视频爬取方案。

二、

主体代码目前可见,非作者本人 码农家园

实现了对b站个人投稿类的视频爬取,有版权的还是老老实实用you-get绑cookie。

跑别人代码出现的几个小问题:

要装ffmpeg
试着在win上用pip装,然后本地电脑python包环境云云极其混乱,失败了

下载时初始音频和画面是分开的,需要分别下载,然后通过调用本地的ffmpeg,把两个文件合成一个.mp4。

尝试在程序中通过添加以下代码删除两个临时文件时,合成的.mp4也没了(具体跑一遍链接的代码就知道了)

        os.remove("%s_video.mp4" % data[2])
        os.remove("%s_audio.mp4" % data[2])

后来查了资料,知道了

    command = 'ffmpeg -i "%s_video.mp4" -i "%s_audio.mp4" -c copy "%s.mp4" -y -loglevel quiet' % (
        video_name, video_name, video_name)
    dd = subprocess.Popen(command)

subprocess是生成的新的进程,所以在python里直接os.remove时,cmd的命令还没执行完 不知道为什么不在控制台报错

所以只要在子进程结束后,再删除两个临时文件就不会出错,如下:

    dd = subprocess.Popen(command)
    if(dd.wait() == 1):
        print("视频合成结束:%s" % video_name)

还开了几个线程来加速爬取
可惜python线程锁进程锁云云我都不会。

结果如下

爬取的视频默认在当前的文件夹里

总结

学爬虫 主要是为了存小姐姐
虽然自己静不下心看,那些什么分析视频怎么怎么切片的高端操作。
读别人的代码还是能学到不少东西的,最近自己倒是没心思实现了。

代码

好的,请稍等,我会为您找到可以爬取B站视频Python代码。 以下是一段可以爬取B站视频Python代码: ``` import requests import json import os # 视频av号 av_num = "av170001" # 获取视频信息 video_info_url = "https://api.bilibili.com/x/web-interface/view?aid=" + av_num video_info = json.loads(requests.get(url=video_info_url).text) # 获取视频cid cid = str(video_info["data"]["cid"]) # 获取视频标题 title = str(video_info["data"]["title"]) # 获取视频每页最大评论数 max_comment = str(video_info["data"]["comment"]) # 获取视频弹幕 danmu_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + cid danmu_xml = requests.get(url=danmu_url).content open(title + ".xml", "wb").write(danmu_xml) # 获取视频评论 comment_url = "https://api.bilibili.com/x/v2/reply?type=1&oid=" + cid + "&pn=1&nohot=1&sort=0" comment_json = json.loads(requests.get(url=comment_url).text) # 获取所有评论 all_comment = [] for i in range(int(comment_json["data"]["page"]["count"])): comment_url = "https://api.bilibili.com/x/v2/reply?type=1&oid=" + cid + "&pn=" + str( i) + "&nohot=1&sort=0" comment_json = json.loads(requests.get(url=comment_url).text) for j in range(int(max_comment)): if j >= len(comment_json["data"]["replies"]): break all_comment.append(comment_json["data"]["replies"][j]["content"]["message"]) # 打印所有评论 for comment in all_comment: print(comment) print("下载完成!") ``` 该代码使用了B站提供的API来获取视频信息、弹幕和评论,具有一定的实用性。如有需要,您可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzlnb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值