某快下饭短剧-剧集批量保存(python网页爬取)
- 技术日志
- 2025-04-05
- 96热度
- 0评论
github源码:https://github.com/zaq12310/Batch-download-of-short-dramas
一、工具
- 解释器:python 3.13
- 模块:requests、re
import requests # 导入请求模块
import re # 导入文本匹配模块
没有这些模块的话,请先在cmd中下载
pip install requests
#re是python自带,因此无需下载
二、代码解析(逻辑分析)
用浏览器打开快手短剧第5集(本代码使用edge浏览器)
2.1 定义请求头请求数据
为什么要定义请求头,因为从网站的设置初衷,它是不想服务于我们的爬虫程序的,网站正常只想服务于客户的访问服务,那么我们要将我们的爬虫程序伪装成为正常的服务。
(在不定义请求头的情况下无法获取网页数据,只能获取到html)
此时我们需要定义一些数据来伪装,通常我们只需要设置 cookie 、referee、user-agent就够了(如果有些特殊的网站可能需要我们有其他的参数)
#定义请求头
headers = {
#用户身份信息
'user-agent': '填写标头中的user-agent',
#用户标识
'cookie': '填写标头中的cookie',
#引荐页
'referer': '填写标头中的referer'}
根据以下步骤找到所需要的数据,将 cookie 、referer 、user-agent 的数据分别粘贴在代码里面
- 打开检查页面
- 刷新网页获取该网页所有数据
- 找到视频url所在地
- 点击标头,请求头(headers)的检查元素界面 找到url,向下滑动找到cookie 、referer 、user-agent ,将所有数据写入代码
2.2 建立循环遍历所有视频连结
定义参数表(在负载里),通过参数表提供所有剧集视频url
- 点击负载,复制内容粘贴到代码里(注意:参数名要用英文引号【''】表示)
#定义参数表 data = { #操作动作 'operationName': "剧集查询", #查询 'query':"查询条件", #查询变量 'variables': {'tubeId': "频道id", # 频道id 'episodeNumber': 0, # 集数【第一集】 'page': "播放器", #页面 'channelId': 0} }
- 将集数变量【episodeNumber】定义为num,建立循环,不断获取视频url
num = 0 ##多个视频url读取所需要的页面自变量 while True: #死循环 # 定义参数 在负载里面 # 参数表:通过参数表找到每个剧集视频不同变量,并建立循环 #定义参数表 data = { #操作动作 'operationName': "剧集查询", #查询 'query':"查询条件", #查询变量 'variables': {'tubeId': "频道id", # 频道id 'episodeNumber': 0, # 集数【第一集】 'page': "播放器", #页面 'channelId': 0} } # 请求目标网址 res = requests.post(url1, json=data, headers=headers) # print(res.status_code) #输出响应码 200成功 403拒绝 404查无网址 500服务器错误 # print(res.text) #打印请求返回的所有数据 # 读出视频url的数据 try: #筛选出返回数据中视频url,并用url2表示 url2 = re.findall(',"photoUrl":"(.*?)","photoH26', res.text)[0] print(url2) #res = requests.get(url) # 获取网址请求结果 #open('短剧名第4集.mp4', 'wb').write(res.content) # 将获取到响应内容写入文件中 num += 1 #下一次循环条件 except: print('已显示所有剧集url') break #停止循环
2.3 在循环中下载视频
开始循环
try:
url2 =视频url
print(url2)
num += 1 #剧集数
res = requests.get(url2) # 获取网址请求结果
# open('短剧名-第4集.mp4', 'wb').write(res.content) # 将获取到视频写入文件中
numstr = str(num) #将num转化为str
filename = '短剧名—第' + numstr + '集.mp4' # 设定每个文件名
open(filename, 'wb').write(res.content)
except:
print('所有剧集已下载完成')
break #停止循环
循环结束/继续条件筛选
请求返回数据中,视频数据都存储在 res→ content 中
三、运行代码输出
运行【下饭短剧批量采集.py】下载所有短剧,并以【短剧名—第N集.mp4】形式存储在当前文件夹中
四、参考资料
- Mind-Explorer. 利用python循环创建多个文件[EB/OL]. [2017-09-27]. https://blog.csdn.net/lifanqq/article/details/78117662.