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通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python中Proxypool库的安装与配置
Oct 19 Python
python3 爬取图片的实例代码
Nov 06 Python
Pyqt5实现英文学习词典
Jun 24 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 Python
anaconda python3.8安装后降级
OpenCV-Python实现人脸美白算法的实例
Matplotlib可视化之添加让统计图变得简单易懂的注释
教你用Python matplotlib库制作简单的动画
PyQt5实现多张图片显示并滚动
pyqt5蒙版遮罩mask,setmask的使用
详解Python描述符的工作原理
You might like
php实现的MySQL通用查询程序
2007/03/11 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
有趣的python小程序分享
2017/12/05 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python实现flappy bird小游戏
2018/12/24 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Django中URL的参数传递的实现
2019/08/04 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
台湾良兴购物网:EcLife
2019/12/01 全球购物
什么是设计模式
2012/06/17 面试题
物业经理求职自我评价
2013/09/22 职场文书
大学应届生求职简历的自我评价
2013/10/08 职场文书
上课睡觉检讨书
2014/01/28 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
工作过失检讨书
2014/02/23 职场文书
法律进企业活动方案
2014/03/04 职场文书
学校运动会报道稿
2014/09/23 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
材料员岗位职责范本
2015/04/11 职场文书
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技