@

前言

本文写了一个爬取视频的案例,使用requests库爬取了好看视频的视频,并进行保存到本地。后续也会更新selenium篇和DrissionPage篇。当然,爬取图片肯定不止这三种方法,还有基于python的scrapy框架,基于node.js的express框架以及基于Java的webmagic框架等等。

爬虫步骤

确定网址,发送请求

我们打开我们需要爬取的网站后,按f12进行检查,因为页面采用的懒加载,所以我们需要往下滑加载新的视频,这时候就会出现新的数据包,这个数据包大概率就是这些新视频加载出来的来源,我们也可以在下图中的①中搜索视频数据包中可能出现的内容,例如视频的后缀,如MP4,m4s,ts等,然后再从中筛选正确的数据包,这个可能就需要有一定的经验。



当我们往下滑刷新的时候,再②中就会加载出新的数据包,点击数据包后,就会出现右边的窗口,在③标头中会看到我们要请求的url地址,以及cookie和一些加密后参数。

代码如下

import requests # 数据请求模块
url='https://haokan.baidu.com/haokan/ui-web/video/feed?time=1723964149093&hk_nonce=915ae0476c308b550e98f6196331fd2a&hk_timestamp=1723964149&hk_sign=93837eec50add65f7ca64a95fb4eb8de&hk_token=aRYZdAVwdwNwCnwBcHNyAAkNAQA' # 请求地址
headers={
# UA伪装
'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'
}
html=requests.get(url,headers=headers)

获取响应数据

在响应里我们可以看到响应的json数据,里面有封面照片地址,标题,视频地址等等,我们只需要获取其中的图片名字(title)和图片地址(previewUrlHttp)即可。

respnose=html.json()

对响应数据进行解析

json数据是字典,所以我们只需要取其中的键就可以了。

data=html['data']['apiData']         # 取照片地址
for li in data:
video_name=li['title'] # 照片名字
video_url=li['previewUrlHttp'] # 照片地址

保存数据

获取到图片的url后只需要再对url进行请求,获取二进制数据,然后进行保存到本地。

video=requests.get(video_url,headers=headers).content   # 对照片地址进行发送请求,获取二进制数据
with open('./videos/'+video_name+'.mp4','wb') as f: # 保存视频
f.write(video)

完整源码

import requests  # 数据解析模块
import os # 文件管理模块 if not os.path.exists("./videos"): # 创建文件夹
os.mkdir("./videos")
url='https://haokan.baidu.com/haokan/ui-web/video/feed?time=1723964149093&hk_nonce=915ae0476c308b550e98f6196331fd2a&hk_timestamp=1723964149&hk_sign=93837eec50add65f7ca64a95fb4eb8de&hk_token=aRYZdAVwdwNwCnwBcHNyAAkNAQA' # 请求地址
headers={
# UA伪装
'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'
}
html=requests.get(url,headers=headers).json()
data=html['data']['apiData'] # 取照片地址
for li in data:
video_name=li['title'] # 照片名字
video_url=li['previewUrlHttp'] # 照片地址
video=requests.get(video_url,headers=headers).content # 对照片地址进行发送请求,获取二进制数据
with open('./videos/'+video_name+'.mp4','wb') as f: # 保存视频
f.write(video)
print(video_name+'.mp4')

多页爬取的就要多去观察数据包,有什么规律,再这个案例中,就涉及到了时间戳js加密。

共勉

少就是多 慢就是快

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。

    • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频

爬虫案例2-爬取视频的三种方式之一:requests篇(1)的更多相关文章

  1. js页面取值的三种方式

    <input id=""<radio <checkbox<div<img对于这些标签内参数取值,一般分为三种类型:一.有关id取值用 #:取id处的v ...

  2. python网络爬虫之解析网页的BeautifulSoup(爬取电影图片)[三]

    目录 前言 一.BeautifulSoup的基本语法 二.爬取网页图片 扩展学习 后记 前言 本章同样是解析一个网页的结构信息 在上章内容中(python网络爬虫之解析网页的正则表达式(爬取4k动漫图 ...

  3. 【爬虫问题】爬取tv.sohu.com的页面, 提取视频相关信息

    尝试解决下面的问题 问题: 爬取tv.sohu.com的页面, 提取视频相关信息,不可用爬虫框架完成 何为视频i关信息?属性有哪些? 需求: 做到最大可能的页面覆盖率 *使用httpClient 模拟 ...

  4. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  5. Python爬取视频指南

    摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://w ...

  6. [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈

    我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:        1.可以了解Python简单爬取图片的一些思路和方法 ...

  7. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  8. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  9. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  10. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

随机推荐

  1. 数据盘故障导致journalnode异常恢复

    背景环境:hdp2.6.6部署的小集群(4节点),这个投入生产后,转手了很多批次人维护,安装源介质这些通通都找不到了,目前官网无法下载hdp的安装介质,中途有坏了一个节点的系统盘,维修好了后,因为没有 ...

  2. Mysql中where条件自动类型转换的坑

    我有张表,其主键id字段为varchar(5),内容是5位随机不重复字符串表的内容大概是这样的 id name s8bk2 admin 9f0ps username 在一个方法中我查询了这张表,代码大 ...

  3. oeasy教您玩转vim - 1 - # 存活下来 🥊

    存活下来 更新 apt 源,升级 vim vim 是什么 vim 是类 unix 系统上的一个文本编辑神器,在 Linux 系统环境中也被许多程序员使用,书写程序和文档. 我们本次课程将围绕 Vim ...

  4. .NET科普:.NET简史、.NET Standard以及C#和.NET Framework之间的关系

    最近在不少自媒体上看到有关.NET与C#的资讯与评价,感觉大家对.NET与C#还是不太了解,尤其是对2016年6月发布的跨平台.NET Core 1.0,更是知之甚少.在考虑一番之后,还是决定写点东西 ...

  5. Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格

    本文分享自华为云社区<Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格>,作者: 云容器大未来. 近日 Kmesh 发布了 v0.4.0 版本,感谢社区的贡献者在两个 ...

  6. 断点续传:使用java对大文件进行分块与合并

    通常我们下载上传的视频文件比较大.虽然https协议没有规定上传文件大小的限制,但是网络的质量,电脑硬件的参差不齐可能会导致大文件快要上传完成的时候突然断网了要重新上传,非常影响用户体验.以此我们引入 ...

  7. Linux 破解mysql密码

    mysql忘记密码怎么办 [root@master ~]# mysql -uroot -pHuawei123123$ mysql: [Warning] Using a password on the ...

  8. 在国产超算平台上(aarch64架构)安装pytorch-cuda失败,究其原因竟是官方未提供对应的cuda版本——pip方式和conda方式均无法获得相应cuda版本

    最近在国产超算平台上安装pytorch,但是怎么弄都会报错: raise AssertionError("Torch not compiled with CUDA enabled" ...

  9. Leetcode: 586. Customer Placing the Largest Number of Orders

    题目要求如下: 给出的例子如下: 简单地说就是要找出表中订单最多客户的ID. 使用如下的代码进行实现: import pandas as pd def largest_orders(orders: p ...

  10. SenseCraft 部署模型到Grove Vision AI V2图像处理模块

    Grove Vision AI V2 图像处理模块开箱测评 摘要 今天教大家快速上手 Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型 ...