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程序实例(通讯录)
Nov 29 Python
python中from module import * 的一个坑
Jul 20 Python
python批量同步web服务器代码核心程序
Sep 01 Python
python django事务transaction源码分析详解
Mar 17 Python
深入理解python中的select模块
Apr 23 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
python flappy bird小游戏分步实现流程
Feb 15 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
js闭包的用途详解
2014/11/09 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
python实现的重启关机程序实例
2014/08/21 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
django跳转页面传参的实现
2020/09/17 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
销售文员的岗位职责
2013/11/20 职场文书
青年教师培训方案
2014/02/06 职场文书
亲属关系公证书
2014/04/08 职场文书
安全负责人任命书
2014/06/06 职场文书
保外就医申请书范文
2015/08/06 职场文书
初中生物教学反思
2016/02/20 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers