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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
python生成IP段的方法
Jul 07 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
python list转置和前后反转的例子
Aug 26 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
python opencv如何实现图片绘制
Jan 19 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Python实现生成bmp图像的方法
Jun 13 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
浅谈python中get pass用法
2019/03/19 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
基于python实现地址和经纬度转换
2020/05/19 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
快递业务员岗位职责
2014/01/06 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
销售目标责任书
2014/07/23 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
食品药品安全责任书
2015/05/11 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书