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关键字and和or用法实例
May 28 Python
对python中return和print的一些理解
Aug 18 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
django迁移文件migrations的实现
Mar 31 Python
python 线程的五个状态
Sep 22 Python
python定义具名元组实例操作
Feb 28 Python
Python中Permission denied的解决方案
Apr 02 Python
Python保存并浏览用户的历史记录
Apr 29 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php生成唯一的订单函数分享
2015/02/02 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
文本链接逐个出现的js脚本
2007/12/12 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python实现简单http服务器
2018/04/12 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
sklearn+python:线性回归案例
2020/02/24 Python
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
高级文秘工作总结的自我评价
2013/09/28 职场文书
英语专业学子个人的自我评价
2013/10/02 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
2016情人节宣传语
2015/07/14 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android