当前位置: 首页 > news >正文

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

目录

 

前言

        道路千万条,安全第一条

        爬虫不谨慎,亲人两行泪

获取b站的章若楠的视频

一、话不多说,先上代码

二、爬虫四步走

1.UA伪装

2.获取url

3.发送请求

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

 总结


 

前言

        道路千万条,安全第一条

        爬虫不谨慎,亲人两行泪

 

获取b站的章若楠的视频

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

 

一、话不多说,先上代码

# 请求b站视频
import json
import requests
from lxml import etreeif __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.texttree = 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).contentaudio_content = requests.get(audio_url, headers=head).contentwith 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是不一样的197af90cade14473a4951e0f1f076090.png

获取UA,ab41406bb2f8457ebed5a14f1d30226a.png

获取referer。df0e3bc694544a1787d18b9aa527c08a.png

 

2.获取url

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

 

3.发送请求

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

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

 

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

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

cd57cda9da60489d843f74f57aa6b5af.png

 

 总结

作者的废话:

        章若楠太好看啦!

封面图片:

e81c0805ea854baa9fab333f9e907007.jpeg

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • leetcode 513.找树左下角的值
  • 分布式锁-redisson锁重试和WatchDog机制
  • LabVIEW多线圈电磁式振动发电机测试
  • Python3 第三十九课 -- 实例八
  • 对于相同网段的IP,部分无法ping通问题
  • 测试管理工具、自动化测试工具、跨浏览器测试工具 推荐
  • ES中聚合查询之date_histogram查询出现key_as_string 和 key含义
  • 从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router、pinia、echarts
  • 爬虫学习1:初学者简单了解爬虫的基本认识和操作(详细参考图片)
  • php_webshell免杀--从0改造你的AntSword
  • MySQL补充性文件
  • recursion depth exceeded” error
  • 【Linux常用命令】之sed命令
  • 设计模式在FileBrowser中的几个应用
  • CTF-Web习题:2019强网杯 UPLOAD
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • canvas 绘制双线技巧
  • ES6 ...操作符
  • Github访问慢解决办法
  • Gradle 5.0 正式版发布
  • HTTP中GET与POST的区别 99%的错误认识
  • isset在php5.6-和php7.0+的一些差异
  • Js基础知识(一) - 变量
  • Linux下的乱码问题
  • Material Design
  • MySQL QA
  • python 装饰器(一)
  • Python_OOP
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 跨域
  • 力扣(LeetCode)357
  • 通过几道题目学习二叉搜索树
  • 微信小程序开发问题汇总
  • 新版博客前端前瞻
  • 用jQuery怎么做到前后端分离
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #pragma 指令
  • #职场发展#其他
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)EOS中账户、钱包和密钥的关系
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Mobi域名介绍
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net 连接达梦数据库开发环境部署
  • .NetCore项目nginx发布
  • .net中生成excel后调整宽度