网页视频抓取脚本(怎么去抓取HTTP的请求包?(二)与SlimerJS内核)

优采云 发布时间: 2022-02-13 07:16

  网页视频抓取脚本(怎么去抓取HTTP的请求包?(二)与SlimerJS内核)

  简介

  前两篇文章介绍了如何抓包HTTP请求包,包括代理服务器的使用和抓包方法。因为当前视频网站的视频地址不是直接在html页面上获取的,所以视频是通过浏览器动态解释js脚本获取的,然后向视频服务器发送视频请求。所以我们通过获取浏览器生成的HTTP请求来获取视频的下载地址。

  思路是直接用firefox

  我们想到了可以动态渲染 js 脚本的程序,最常见的是浏览器。我们通过命令运行

  您可以使用 firefox 打开 URL。但是没有显示我们就不能用了,不过我们以后有办法解决这个问题。

  python+selenium+Phantomjs

  因为我们需要渲染JS脚本而不需要界面显示,所以我们也想到了python+selenium+Phantomjs来动态渲染页面。 Phantomjs 是无头浏览器(无头浏览器就是没有界面的浏览器)。

  但是在 Phantomjs 1. 版本 5 之后,不再支持 flash 插件。也就是说,虽然 Phantomjs 可以动态加载 JS 脚本,但不能渲染视频。因此不会发出获取视频的 HTTP 请求。

  我截图得到了渲染后的页面,如下图:

  

  视频播放窗口黑屏,抓包程序无法捕获带有flv字符串的HTTP请求。

  我也试过1.4.1版的Phantomjs,说可以通过这个命令加载Flash插件

  ./bin/phantomjs --load-plugins=yes examples/snap.js

  通过渲染JS脚本,截图如下:

  

  虽然得到的截图和上面的不一样,但是视频中有加载状态,但是还是抓不到视频的HTTP请求。最后在python中调用webdriver.Phantomjs()时报错。

  最后不得不放弃使用 Phantomjs

  slimerjs

  当我在网上搜索无头浏览器时,我也发现了 slimerjs。

  **PhantomJS 和 SlimerJS 的异同:**来自这篇文章文章

  PhantomJS基于Webkit内核,不支持Flash播放 SlimerJS基于Firefox的Gecko内核,支持Flash播放,执行过程会显示在页面上

  所以我们需要支持 Flash 播放。但是问题又来了! SlimerJS 不是纯粹的无头浏览器,它需要 DISPLAY! ! 那么我们能做些什么来解决这个问题呢?有!

  xvfb

  xvfb通过提供一个类似的X server daemon并设置环境变量DISPLAY让程序运行来提供程序运行环境

  通过这个,你也可以解决前面提到的第一个火狐遇到的问题。我感觉我一直在一个圈子里= =!

  方案实施

  最后我们决定使用 slimerjs 来获取页面。因为没有办法通过python的selenium方法调用slimerjs,那么我们只能通过python调用命令行程序的方法来动态渲染页面。 slimerjs 脚本如下。当我们调用这个脚本时,我们传入一个网页地址参数。 slimerjs 负责打开这个页面并渲染页面的内容。

  这个脚本的文件名是getPage.js

  我们的python调用os.system("xvfb-run slimerjs getPage.js " + videoURL) 来渲染视频URL的视频。

  我们最终的 Python 程序是 slimerjs_crawl_video.py

  获取视频地址! !

  未解决的问题

  调用python slimerjs_crawl_video.py时,

  我不知道如何控制这个时间。我尝试修改getPage.js的window.setTimeout函数的时间,但还是需要90多秒。我猜python的 os.system() 的限制是阻止某些时间。返回的时间(超过 90 秒)。接下来我会查一些相关的。

  原来这个标题不太适合这个文章。但是还是没变,因为我原来是按照无头浏览器的思路解决这个问题的

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线