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 相关文章推荐
Python3搜索及替换文件中文本的方法
May 22 Python
python写日志封装类实例
Jun 28 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
Python网络编程详解
Oct 31 Python
Python处理中文标点符号大集合
May 14 Python
linux下python使用sendmail发送邮件
May 22 Python
python二进制文件的转译详解
Jul 03 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
Python 如何在字符串中插入变量
Aug 01 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
保密承诺书范文
2014/03/27 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
新书发布会策划方案
2014/06/09 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
党支部书记岗位职责
2015/02/15 职场文书
社区节水倡议书
2015/04/29 职场文书