我正在开发一个用Ruby编写的应用程序,并使用selenium来废弃Yahoo搜索结果,并从每个结果页面上的每个链接中提取标题描述和URL。
我的问题是网址我看起来像这样:
我需要的只是网站的网址,而不是雅虎搜索方面的网址。我被告知这可以通过PHP使用这样的函数:
function translateurl($line) {
$c="0123456789abcdef" ;
for ($a=0;$a<16;++$a) { for ($b=0;$b<16;++$b)
$tr["%".$c[$a].$c[$b]]=chr(($a*16)+$b) ; }
$a=explode("http",$line) ; $b=explode("/",$a[2]) ; $u="http".$b[0];
$url=strtr($u,$tr) ; return $url ;
}
我已经能够将所有内容转换为Ruby,除了以下部分:
$tr["%".$c[$a].$c[$b]]=chr(($a*16)+$b)
我有点理解这是如何工作的,但我觉得在使用Selenium的Ruby中这应该更容易。目前,我唯一的解决方法是在新标签页中打开链接并从中获取URL。但这需要花费大量时间才能在不打开链接的情况下更轻松地转换URL。
我目前的Ruby代码:
def translate_url(url)
c='0123456789abcdef'
for a in 0..16
for b in 0..16
tr = ['%' + c[a] + c[b]]
tr((a*16)+b).ord
end
end
a = ('http' + url).split(', ')
b = ('/' + a[2]).split(', ')
u = ('http' + b[0])
return_url = strtr(u,tr)
return_url
end
有什么想法吗?
答案 0 :(得分:2)
解码网址本身可以通过ruby URI模块完成。更大的挑战是只将正确的部分排除在路径之外。你可以这样做:
URI.decode(yahoo_url).match(%r{RU=(.*)/RK}).captures
这会为您提供匹配内容的列表,因此在您的示例["http://en.wikipedia.org/wiki/Something"]
但要注意这个正则表达式只有在你想要的网址总是在RU =之后出现并且后面是/ RK时才有效。