Python爬取某拍短视频


Posted in Python onJune 11, 2021

一、抓取目标

目标网址:美拍视频

Python爬取某拍短视频

二、工具使用

开发环境:win10、python3.7
开发工具:pycharm、Chrome
工具包:requests、xpath、base64

三、重点学习内容

爬虫采集数据的解析过程
js代码调试技巧
js逆向解析代码
Python代码的转换

四、项目思路解析

进入到网站的首页
挑选你感兴趣的分类
根据首页地址获取到进入详情页面的超链接的跳转地址

Python爬取某拍短视频

找到对应加密的视频播放地址数据

Python爬取某拍短视频

这个数据是静态的网页数据,通过js代码进行解码的
找到对应的解析代码
先找到视频的播放地址
找到解析视频地址的加密js文件
点击播放的时候会触发文件

Python爬取某拍短视频

大致能看出来这个是base64加密之后的数据
在对应的js文件里搜索关键字
找到js的加密方式

Python爬取某拍短视频

js函数的一些函数的用法

# eplace()方法用于在字符串中用一些字符替换另一些字符
    # parseInt 数据转换成对应的整型
    # base64.atob   对base64编码过的字符串进行解码
    # substring 方法可在字符串中抽取从 start 下标开始的指定数目的字符

Python爬取某拍短视频

将js代码转换成Python代码

import base64

def decode(data):
    def getHex(a):
        return {
            'str': a[4:],
            'hex': ''.join(list(a[:4])[::-1]),
        }

    def getDec(a):
        b = str(int(a, 16))
        return {
            'pre': list(b[:2]),
            'tail': list(b[2:]),
        }

    def substr(a, b):
        c = a[0: int(b[0])]
        d = a[int(b[0]): int(b[0]) + int(b[1])]
        return c + a[int(b[0]):].replace(d, "")

    def getPos(a, b):
        b[0] = len(a) - int(b[0]) - int(b[1])
        return b

    b = getHex(data)
    c = getDec(b['hex'])
    d = substr(b['str'], c['pre'])
    return base64.b64decode(substr(d, getPos(d, c['tail'])))

print(decode("e121Ly9tBrI84RdnZpZGVvMTAubWVpdHVkYXRhLmNvbS82MGJjZDcwNTE3NGZieXBueG5udnRwMTA5N19IMjY0XzFfNWY3YThmM2U0MTEwNy5tc2JVjAu3EDQ="))

得出最终视频播放地址

Python爬取某拍短视频
Python爬取某拍短视频

五、简易源码分享

import requests
from lxml import etree
import base64

def decode_mp4(data):
    def getHex(a):
        return {
            'str': a[4:],
            'hex': ''.join(list(a[:4])[::-1]),
        }

    def getDec(a):
        b = str(int(a, 16))
        return {
            'pre': list(b[:2]),
            'tail': list(b[2:]),
        }

    def substr(a, b):
        c = a[0: int(b[0])]
        d = a[int(b[0]): int(b[0]) + int(b[1])]
        return c + a[int(b[0]):].replace(d, "")

    def getPos(a, b):
        b[0] = len(a) - int(b[0]) - int(b[1])
        return b

    b = getHex(data)
    c = getDec(b['hex'])
    d = substr(b['str'], c['pre'])
    return base64.b64decode(substr(d, getPos(d, c['tail'])))
# 运行主函数
def main():
    url = 'https://www.meipai.com'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
    }
    response = requests.get(url=url, headers=headers)
    html_data = etree.HTML(response.text)
    href_list = html_data.xpath('//div/a/@href')
    # print(href_list)
    for href in href_list:
        res = requests.get('https://www.meipai.com' + href, headers=headers)
        html = etree.HTML(res.text)
        name = html.xpath('//div[@id="detailVideo"]/img/@alt')[0]
        mp4_data = html.xpath('//div[@id="detailVideo"]/@data-video')[0]
        # print(name, mp4_data)
        mp4_url = decode_mp4(mp4_data).decode('utf-8')
        print(mp4_url)
        result = requests.get("http:" + mp4_url)
        with open(name + ".mp4", 'wb') as f:
            f.write(result.content)
            f.close()


if __name__ == '__main__':
    main()

到此这篇关于Python爬取某拍短视频的文章就介绍到这了,更多相关Python爬取视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python-嵌套列表list的全面解析
Jun 08 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python tkinter界面居中显示的方法
Oct 11 Python
Jupyter notebook如何实现指定浏览器打开
May 13 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
Python爬取豆瓣数据实现过程解析
Oct 27 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
详解python字符串驻留技术
May 21 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
javascript实现画板功能
2020/04/12 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
生产部经理岗位职责
2013/12/16 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
《诺贝尔》教学反思
2014/02/17 职场文书
六个一活动实施方案
2014/03/21 职场文书
会计学专业自荐信
2014/06/25 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2016新年致辞
2015/08/01 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技