基于 Requests
和 FFmpeg
的 PornHub 视频下载工具,支持多任务并行下载。
用于练手的一个小脚本,一共 100 行出头的代码。
初衷是看妹子,但是 coding 的过程中学到很多东西。
一开始的版本,用到了 Selenium
,参见 Selenium 分支
如果只是临时用一下,完全不用像这样大费周章,可以用 IDM 这样现成的插件,或者更厉害的 CoCoCut。
具体使用方法可以参考:在线视频抓取神器:COCOCUT——可见皆可得
因为如果只在线看,收藏夹里的作品经常会莫名其妙失踪,比如:
这些依赖在 MacOS 和 Linux 下安装非常方便,基本都是一行代码就安装好了,Windows 下会稍微麻烦一点,不过也就多废几分钟功夫。
- Python 3.6+
- requests: 用于下载视频
- bs4: 用于解析 HTML
- FFmpeg 和 ffmpy3: 用于下载并合并视频片段
- Node.js : 用于运行那一小段 JS 代码
- 代理软件,我用的是 ClashX
脚本中设置了代理软件用到的通信端口:
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
也可以在执行 Python 脚本的终端中进行设置:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
二者的效果是一样的。
P站视频的信息包含在视频页面 HTML 中定义的一个 flashvars
开头的变量中:
下载链接包含在这个 videoUrl
中:
如果不利用 Selenium
,无法得到真实的 mp4 文件的下载地址,但是可以得到包含众多 ts 格式的视频片段地址的 m3u8 文件。这时我们只需要用 FFmpeg
把这些 ts 文件下载下来,并合并为 mp4 文件即可。
-
在环境中安装包括
FFmpeg
在内的众多依赖 -
运行脚本
$ python pornhub_downloader.py 'https://cn.pornhub.com/view_video.php?viewkey=xxxxxxxxxx' -s './学习资料' -n 2
- url: 指定你感兴趣的学习资料页面或者指定 model 的主页
- -s: 视频保存的路径,若省略,则在当前路径下的 Download 文件夹(若不存在则自动新建)
- -n: 同时下载的进程数,默认为1
支持断点续传,如果连接断开,重新运行即可。
- 去掉对
Selenium
的依赖 - 支持多任务并行下载
- GUI