从网页中提取javascript渲染数据

时间:2013-10-05 00:57:29

标签: javascript ruby-on-rails ruby ajax

我最终需要完成的是

一个。将URL发送到此页面上的表单:youtube-mp3.org

B中。获取结果页面上链接的scr属性。

我正在使用Ruby on Rails并尝试使用此方法发送请求并获取结果页面的正文:

require 'uri'
yt_uri = URI('http://www.youtube-mp3.org')
params = { :id => "youtube-url" , :value => "http://www.youtube.com/watch?v=KMU0tzLwhbE" }
yt_uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(yt_uri)
res.body

它工作正常但问题是网站使用javascript来呈现链接,因此它没有显示在源代码中。相反,我得到

<noscript>
  <div class="warning">You have to enable JavaScript to use this Service!</div>
</noscript>

有没有办法解决这个问题。我对任何建议持开放态度

1 个答案:

答案 0 :(得分:0)

有两条路线:

  • 实际执行Javascript,然后进行抓取。就资源而言,就工作而言,这是重量级的。
  • 弄清楚有问题的Javascript实际上在做什么

在这种情况下,它非常简单。转到http://www.youtube-mp3.org,打开浏览器的可靠网络调试器,然后使用Web表单。现在,返回并检查请求和响应。

就我而言,似乎有四次外部元素调用:

  • /一个/ pushitem
  • rectangle.htm
  • skyscraper.htm
  • /一个/ iteminfo
  • i.ytimg.com/vi/KMU0tzLwhbE

前三个请求中没有任何内容,但第四个有一些有趣的JSON,最后一个是视频的缩略图。

来自/ a / iteminfo的文字:

info = { "title" : "Developers", "image" : "http://i.ytimg.com/vi/KMU0tzLwhbE/default.jpg", "length" : "3", "status" : "serving",  "progress_speed" : "",  "progress" : "",  "ads" : "",  "pf" : "",  "h" : "a0bb1715519025e36487b173b231295c"  };

而且,对于那些在家中跟随的人,链接src jsamm正在努力寻找:

http://www.youtube-mp3.org/get?video_id=KMU0tzLwhbE&h=a0bb1715519025e36487b173b231295c&r=1380935176286

video_id很容易理解 - 我们已经拥有它。 {J} blob中返回了h值。 r有点神秘 - 但它看起来非常像当前的unix时代+ 3个额外数字。哦等等 - 这就是Javascript Date.getTime()给你的东西!

无论如何,不​​要这样做。你不仅对任何经营youtube-mp3.org的人都是一个混蛋,你几乎肯定违反了YouTube的服务条款,而且你在丑陋的版权水域游泳。