• Python实现自动登录+获取数据


    前言

    大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

    Dy这个东西想必大家都用过,而且还经常刷,今天就来用代码,获取它的视频数据

    如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

    环境使用

    • Python 3.8

    • Pycharm

    模块使用

    • requests

    • selenium

    • json

    • re

    一. 数据来源分析

    1. 明确需求

      明确采集网站以及数据内容

      网址:

      https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id=7270865943398518050
      
      • 1

      数据: 视频链接 / 视频标题

    2. 抓包分析

      通过开发者工具进行抓包分析

      I. 打开开发者工具: F12
      
      II. 刷新网页
      
      III. 找到数据链接
      
      • 1
      • 2
      • 3
      • 4
      • 5

      视频链接:

      https://v26-web.dyvod.com/295eea512e6f187309e6181297ec185e/64e8a7f8/video/tos/cn/tos-cn-ve-15c001-alinc2/o8vKACOD9NSbaA3mnggzfIO5QAgkqHnGr7sAeB/?a=6383&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=609&bt=609&cs=2&ds=3&ft=bvTKJbQQqU-mfJ4ZPo0OW_EklpPiXV8zNMVJEdBqSpvPD-I&mime_type=video_mp4&qs=15&rc=NTg8NzpoNGY2aGU0N2k1PEBpajhuNTY6ZmhtbTMzNGkzM0AtMy4xY2E0Xi4xYDNjX15iYSM2bl5scjRvLWdgLS1kLWFzcw%3D%3D&btag=e00010000&dy_q=1692965337&l=20230825200856A1A3326D295C25055965
      
      • 1

      IV. 通过关键字搜索, 找到链接对应数据包

      视频链接 / 标题 --> 来自于网页源代码<进行编码>

      数据包:

      https://www.dy.com/user/MS4wLjABAAAAB0-gppwu15DtJJZmMpgUqakr7Jw_pmr7skR3IW6MwCQ?modal_id=7270865943398518050
      
      • 1

    二. 代码实现步骤

    1. 发送请求, 模拟浏览器对于url地址发送请求

    2. 获取数据, 获取服务器返回响应数据

    3. 解析数据, 提取我们需要的数据内容

    4. 保存数据, 保存视频数据

    代码实现

    发送请求

    模拟浏览器: <可以直接复制>

    • response.text 获取响应文本数据

    • response.json() 获取响应json数据

    • response.content 获取响应二进制数据

    我们使用requests.get()方法向指定的URL发送GET请求,并获取到响应的内容

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    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_id=7270476649714421046&vid=7269532986553552140'
    # 发送请求
    response = requests.get(url=url, headers=headers)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解析数据

    使用正则表达式来搜索和匹配HTML内容中的特定模式,以提取所需的数据。

    调用re模块里面findall方法

    re.findall(‘数据: 你需要的数据’, ‘数据源: 从什么地方获取数据’) --> 找到所有数据内容

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    # 获取响应文本数据  获取网页源代码内容
    html_data = response.text
    # 提取标题
    title = re.findall('video_title" content="(.*?)"/>', html_data)[0]
    # 提取视频信息 <经过了编码>
    video_info = re.findall('', 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']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    保存数据

    对于视频链接发送请求, 获取二进制数据内容, 保存本地文件夹

    video_content = requests.get(url=video_url, headers=headers).content
    with open('video\\' + title + '.mp4', mode='wb') as f:
        f.write(video_content)
    print(title)
    print(video_url)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    模拟登录

    导入所需模块

    # 自动化测试模块
    from selenium import webdriver
    # demo
    from chaojiying import Chaojiying_Client
    from password import account, password
    # 动作链
    from selenium.webdriver.common.action_chains import ActionChains
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    自动登录浏览器

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    # 打开浏览器, 访问网站
    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    调用

    '''
    python资料获取看这里噢!! 小编 V:qian97378,即可获取:
    文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
    '''
    # 调用 --> 帮助我们识别文字坐标
    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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    代码运行结果展示

    尾语

    好了,今天的分享就差不多到这里了!

    对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

    喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

    最后,宣传一下呀~👇👇👇 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀👇👇👇

  • 相关阅读:
    Spring是如何整合JUnit的?JUnit源码关联延伸阅读
    Java天花板从了解java&&JDK到底是什么开始?
    Mysql安装配置
    [附源码]Python计算机毕业设计Django养生药膳推荐系统
    微信小程序(五十二)开屏页面效果
    数据结构 每日一练 :选择 + 编程
    面试题亲身经历
    Oracle 主从切换脚本
    基于共生生物优化的BP神经网络(分类应用) - 附代码
    【camera】摄像头模组简单介绍
  • 原文地址:https://blog.csdn.net/weixin_62853513/article/details/134535653