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字典多条件排序方法实例
Jun 30 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Pytorch入门之mnist分类实例
Apr 14 Python
解决DataFrame排序sort的问题
Jun 07 Python
python实现人民币大写转换
Jun 20 Python
Python 处理图片像素点的实例
Jan 08 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
简略的前端架构心得&&基于editor为例子的编码小技巧
2010/11/25 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
计算机应用专业毕业生求职信
2013/10/24 职场文书
银行实习生的自我评价
2013/12/09 职场文书
聚美优品的广告词
2014/03/14 职场文书
作风建设剖析材料
2014/10/06 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫