python-爬虫实例(4):获取b站的章若楠的视频

目录

前言

道路千万条,安全第一条

爬虫不谨慎,亲人两行泪

获取b站的章若楠的视频

一、话不多说,先上代码

二、爬虫四步走

1.UA伪装

2.获取url

3.发送请求

4.获取响应数据进行解析并保存

总结


前言

道路千万条,安全第一条

爬虫不谨慎,亲人两行泪

获取b站的章若楠的视频

不要问,问就是博主喜欢,嘿嘿嘿嘿(流口水)

一、话不多说,先上代码

python 复制代码
# 请求b站视频
import json
import requests
from lxml import etree

if __name__ == '__main__':
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        ,
        # 防盗链
        "Referer": "https://www.bilibili.com/"
        ,
        "Cookie": "buvid3=3EEF3EE1-472C-F430-105F-0E4F321F331C25161infoc; b_nut=1720613925; _uuid=46847D108-EFD1-9828-99910-32119EADB6EB26022infoc; enable_web_push=DISABLE; buvid4=E9918A3A-008D-2748-2B1F-78B04E8CCA5825688-024071012-IYJQtQw8DTdtrI0uY1UGvQ%3D%3D; buvid_fp=adf3cfaf35396cd4f051041d58ea252d; DedeUserID=455536180; DedeUserID__ckMd5=ece5cba51b3582b0; header_theme_version=CLOSE; rpdid=|(Y|RJRRJ~m0J'u~k|YuR|k); hit-dyn-v2=1; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; CURRENT_QUALITY=80; b_lsid=FA4254F2_190DA67F5A6; bmg_af_switch=1; bmg_src_def_domain=i0.hdslb.com; SESSDATA=464ec009%2C1737203167%2C4093c%2A72CjCcAmS6QdnftcRgMbranRB57RDcvOgVEYQ2eANilbiZTke2ujiipqzyDhLaHzdf-lQSVnBETDB6RC1iRTBPOXE0MXJvWndtQ2J5M0ttRUdsNzV4eDBOS0ZHSnJFNGstUXdoZV9YWlFDMUN6WktnVWdyZzNXTHoxX3ZHMEQ4WnBRVFhuS3FWdlZRIIEC; bili_jct=7dcc1afe4e9061803755fe502bd89493; home_feed_column=5; browser_resolution=1528-750; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE5MTAzODcsImlhdCI6MTcyMTY1MTEyNywicGx0IjotMX0.ZBTc3IhjtIXKw31_mMRIL58EBBFttxFrh9PXvDeNu74; bili_ticket_expires=1721910327; sid=5oumv249; bp_t_offset_455536180=956974561008549888"
    }

    url = "https://www.bilibili.com/video/BV1Ya411x7YS/?spm_id_from=333.788.recommend_more_video.-1&vd_source=c37b332e3068ca57bd61f05c52b41922"

    response = requests.get(url, headers=head)

    vid = response.text

    tree = etree.HTML(vid)

    with open("bilibili.html", "w", encoding="utf8") as bili:
        bili.write(vid)

    vid_info = "".join(tree.xpath("//head/script[4]/text()"))[20:]
    # print(vid_info)   # 是一个json大字符串

    info_dict = json.loads(vid_info)
    # print(info_dict)  # 变成字典

    video_url = info_dict["data"]["dash"]["video"][0]["baseUrl"]  # 获取视频的网址
    audio_url = info_dict["data"]["dash"]["audio"][0]["baseUrl"]  # 获取音频的网址

    video_content = requests.get(video_url, headers=head).content
    audio_content = requests.get(audio_url, headers=head).content

    with open("zhangruonan.wmv", "wb") as a:
        a.write(video_content)

    with open("zhangruonan.mp4", "wb") as b:
        b.write(audio_content)

    pass

可以看见,这次代码多了不少东西,还有些变得不一样了,没事,我们一步步分析。

二、爬虫四步走

1.UA伪装

这次UA伪装的头部代码多了不少,"Cookie"和"Referer",这些其实都是b站的反扒机制。而且这次也不用随机生成UA了,而是使用检查里的,因为随机生成的可能是APP端的,这个用不了。

先登录自己的b站账号,再获取Cookie,因为每个用户的Cookie是不一样的

获取UA,

获取referer。

2.获取url

在该界面按f12进入检查界面,若是检查界面没东西的话就刷新网页,然后往上翻到第一个,复制url粘贴到pycharm即可

3.发送请求

流水的url,铁打的发送请求。

python 复制代码
response = requests.get(url, headers=head)

4.获取响应数据进行解析并保存

  • 这次不一样的地方在于,视频和音频的url在head的第四个script标签下。
  • 而里面的文本内容在去除前面的"window.playinfo="后,取出来的是个json大字符串。
  • 用json.loads方法将字符串转换成字典,再通过字典的键去除里面的视频和音频的url。
  • b站的视频和音频网址都放在固定的键内,用上面给的代码即可取出来。
  • 取出来之后再次发送请求,获取数据。
  • 注意!!!图片,视频和音频都是二进制内容,所以用content属性获取。
  • 最后, 以写二进制内容的方式存入文件中,注意文件的类型,音频是MP4,视频是MP4或者是wmv。

总结

作者的废话:

章若楠太好看啦!

封面图片:

相关推荐
猫头虎几秒前
楚存科技CSD32GAZIGY SD NAND贴片式TF卡深度评测:小身材大容量,嵌入式存储新选择
linux·服务器·网络·人工智能·windows·科技·芯片
John.Lewis几秒前
Python小课(6)基础语法⑤
开发语言·python
俊哥V几秒前
AI一周事件 · 2026年4月15日–4月21日
人工智能·ai
2301_777599371 分钟前
如何优化宝塔面板的服务器内存使用_调整MySQL内存占用
jvm·数据库·python
LeadTech茶馆2 分钟前
在 Spring 体系中做 RAG,可以不单独引入向量数据库——用 ES 就够了
人工智能
财经资讯数据_灵砚智能2 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月22日
人工智能·python·信息可视化·自然语言处理·ai编程
Strugglingler3 分钟前
Linux Device Drivers-第七章 时间, 延迟及延缓操作
linux·笔记
csgo打的菜又爱玩6 分钟前
7.DispatcherResourceManagerComponentFactory解析.md
开发语言·python·flink
耶夫斯计7 分钟前
Context Engineering:构建高可靠性 AI Agent 的底层逻辑
人工智能·python
C灿灿数模9 分钟前
2026五一数学建模C题思路模型,解析2025五一数学建模C题
人工智能·机器学习·逻辑回归