我以前使用过hpricot从一些超文本标记语言标签内的网站抓取内容,但是我正在尝试构建一个在这个页面http://view-source:http://megavideo.com/?v=014U2YO9上找到的所有flashvar的数组
require 'hpricot'
require 'open-uri'
flashvars = Array.new
doc = Hpricot(open("http://megavideo.com/?v=014U2YO9"))
for flashvars in (doc/"/param[@name='flashvars']") do
flashvars << flashvar
end我一直在尝试上面的代码片段,希望我是在正确的轨道上,有人能进一步帮助我吗?
谢谢你
发布于 2011-04-22 03:52:13
您使用的语法表明您正在尝试从<param>元素获取属性,但该页面上不存在此类标记。对flashvar对象的属性有过多的JavaScript赋值。假设这些都是您想要的,那么您不需要Hpricot,只需要JS的正则表达式。这似乎起作用了:
require 'open-uri'
html = open("http://megavideo.com/?v=014U2YO9").read
flashvars = Hash[ html.scan( /flashvars\.(\w+)\s*=\s*["']?(.+?)["']?;/ ) ]
require 'pp' # Just for pretty output here
pp flashvars
#=> {"logintxt"=>"Login",
#=> "registertxt"=>"Register",
#=> "searchtxt"=>"Search videos",
#=> "searchrestxt"=>"\"",
#=> "useSystemFont"=>"0",
#=> "size"=>"17",
#=> "loginAct"=>"?c=login%26next%3Dv%253D014U2YO9",
#=> "registerAct"=>"?c=signup",
#=> "userAct"=>"?c=account",
#=> "signoutAct"=>"javascript:signout()",
#=> "myvideostxt"=>"My Videos",
#=> "videosAct"=>"?c=myvideos",
#=> "added"=>"2011-04-14",
#=> "username"=>"beenerkeekee19952",
#=> etc.请注意,这使得所有的值在Ruby语言中都是字符串,甚至是在JavaScript中是数字的值。由于它去掉了JavaScript字符串的前导/尾随引号,因此您无法区分flashvars.foo = 42;和flashvars.bar = "42";。
https://stackoverflow.com/questions/5748876
复制相似问题