视频网站做app,全球外贸网,手机网站设计思路,企业标准备案平台官网前言
Dy这个东西想必大家都用过#xff0c;而且还经常刷#xff0c;今天就来用代码#xff0c;获取它的视频数据
环境使用
Python 3.8 Pycharm
模块使用
requests selenium json re
一. 数据来源分析
1. 明确需求 明确采集网站以及数据内容
网址: https://www.dy.co…前言
Dy这个东西想必大家都用过而且还经常刷今天就来用代码获取它的视频数据
环境使用
Python 3.8 Pycharm
模块使用
requests selenium json re
一. 数据来源分析
1. 明确需求 明确采集网站以及数据内容
网址: https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id7270865943398518050数据: 视频链接 / 视频标题 2. 抓包分析 通过开发者工具进行抓包分析 I. 打开开发者工具: F12 II. 刷新网页 III. 找到数据链接
视频链接: https://v26-web.dyvod.com/295eea512e6f187309e6181297ec185e/64e8a7f8/video/tos/cn/tos-cn-ve-15c001-alinc2/o8vKACOD9NSbaA3mnggzfIO5QAgkqHnGr7sAeB/?a6383ch26cr3dr0lrallcd0%7C0%7C0%7C3cv1br609bt609cs2ds3ftbvTKJbQQqU-mfJ4ZPo0OW_EklpPiXV8zNMVJEdBqSpvPD-Imime_typevideo_mp4qs15rcNTg8NzpoNGY2aGU0N2k1PEBpajhuNTY6ZmhtbTMzNGkzM0AtMy4xY2E0Xi4xYDNjX15iYSM2bl5scjRvLWdgLS1kLWFzcw%3D%3Dbtage00010000dy_q1692965337l20230825200856A1A3326D295C25055965IV. 通过关键字搜索, 找到链接对应数据包 视频链接 / 标题 -- 来自于网页源代码进行编码
数据包: https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id7270865943398518050二. 代码实现步骤
发送请求, 模拟浏览器对于url地址发送请求获取数据, 获取服务器返回响应数据解析数据, 提取我们需要的数据内容保存数据, 保存视频数据
代码实现
发送请求 模拟浏览器: 可以直接复制 response.text 获取响应文本数据 response.json() 获取响应json数据 response.content 获取响应二进制数据 我们使用requests.get()方法向指定的URL发送GET请求并获取到响应的内容 headers {# User-Agent 用户代理, 表示浏览器基本身份信息User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
}
# 请求链接
url https://www.dy.com/user/MS4wLjABAAAArgJe6h-DzQcvyZ1O71yXSdJFn19Tqq8lFCIffgy5SlhwYlkseK5aM5ETF8KoaGDK?modal_id7270476649714421046vid7269532986553552140
# 发送请求
response requests.get(urlurl, headersheaders)解析数据 使用正则表达式来搜索和匹配HTML内容中的特定模式以提取所需的数据。 调用re模块里面findall方法 re.findall(‘数据: 你需要的数据’, ‘数据源: 从什么地方获取数据’) -- 找到所有数据内容 # 获取响应文本数据 获取网页源代码内容
html_data response.text
# 提取标题
title re.findall(video_title content(.*?)/, html_data)[0]
# 提取视频信息 经过了编码
video_info re.findall(script idRENDER_DATA typeapplication/json(.*?)/script, html_data)[0]
# 解码
info requests.utils.unquote(video_info)
# 把完整json数据格式字符串, 转成字典数据类型
json_data json.loads(info)
# 根据冒号左边的内容[键], 提取冒号右边的内容[值]
video_url https: json_data[app][videoDetail][video][bitRateList][0][playAddr][0][src]保存数据 对于视频链接发送请求, 获取二进制数据内容, 保存本地文件夹 video_content requests.get(urlvideo_url, headersheaders).content
with open(video\\ title .mp4, modewb) as f:f.write(video_content)
print(title)
print(video_url)模拟登录
导入所需模块
# 自动化测试模块
from selenium import webdriver
# demo
from chaojiying import Chaojiying_Client
from password import account, password
# 动作链
from selenium.webdriver.common.action_chains import ActionChains自动登录浏览器
# 打开浏览器, 访问网站
driver webdriver.Chrome()
driver.get(https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ)
# 延时
driver.implicitly_wait(10)
time.sleep(2)
# 获取验证码图片
img_label driver.find_element_by_css_selector(.captcha_verify_container)
# 截图 保存验证码图片
img_label.screenshot(yzm.png)调用 # 调用 -- 帮助我们识别文字坐标
chaojiying Chaojiying_Client(账号, 密码, 96001)
# 读取图片
im open(yzm.png, rb).read()
result chaojiying.PostPic(im, 9004)[pic_str]
for res in result.split(|):x res.split(,)[0]y res.split(,)[-1]ActionChains(driver).move_to_element_with_offset(img_label, int(x), int(y)).click().perform()driver.find_element_by_css_selector(.captcha_verify_action div:last-of-type).click()
time.sleep(2)driver.implicitly_wait(10)
lis driver.find_elements_by_class_name(Eie04v01)
for li in lis:video_id li.find_element_by_css_selector(a).get_attribute(href).split(/)[-1]最后代码运行结果展示