-1

我最终需要完成的是

A. 将 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>

有没有解决的办法。我愿意接受任何建议

4

1 回答 1

0

有两条路线:

  • 实际执行 Javascript,然后进行抓取。这是重量级的,无论是在资源方面,还是在所需工作方面
  • 弄清楚有问题的 Javascript 实际在做什么

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

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

  • /a/pushitem
  • 矩形.htm
  • 摩天大楼.htm
  • /a/项目信息
  • 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很容易弄清楚——我们已经有了。该h值在该 JSON blob 中返回。r有点神秘——但它看起来非常像当前的 unix 纪元 + 3 个额外的数字。哦等等——这就是 JavascriptDate.getTime()给你的!

无论如何,不​​要这样做。对于运行 youtube-mp3.org 的人来说,您不仅是个混蛋,而且您几乎肯定违反了 YouTube 的服务条款,而且您在丑陋的版权水域中游泳。

于 2013-10-05T01:28:54.780 回答