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修改Excel数据的实例代码
Nov 01 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python文件操作类操作实例详解
Jul 11 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python学习教程之使用py2exe打包
Sep 24 Python
用Pygal绘制直方图代码示例
Dec 07 Python
python的pip安装以及使用教程
Sep 18 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
PHP4与PHP5的时间格式问题
2008/02/17 PHP
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
js function使用心得
2010/05/10 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
angularjs基础教程
2014/12/25 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python编程之序列操作实例详解
2017/07/22 Python
python实现TF-IDF算法解析
2018/01/02 Python
python实现简易动态时钟
2018/11/19 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
基于django传递数据到后端的例子
2019/08/16 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
求职自荐信怎么写
2015/03/04 职场文书