Php 解码雅虎搜索结果URL';s
我正在开发一个用Ruby编写的应用程序,它使用selenium在Yahoo搜索结果中删除,并从每个结果页面的每个链接中提取标题描述和URL 我的问题是我得到的URL是这样的:Php 解码雅虎搜索结果URL';s,php,ruby-on-rails,ruby,selenium,web-scraping,Php,Ruby On Rails,Ruby,Selenium,Web Scraping,我正在开发一个用Ruby编写的应用程序,它使用selenium在Yahoo搜索结果中删除,并从每个结果页面的每个链接中提取标题描述和URL 我的问题是我得到的URL是这样的: 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(
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 ;
}
URI.decode(yahoo_url).match(%r{RU=(.*)/RK}).captures
我需要的只是该网站的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 ;
}
URI.decode(yahoo_url).match(%r{RU=(.*)/RK}).captures
我有点理解这是如何工作的,但我觉得在Ruby中使用Selenium应该更容易。目前,我唯一的解决办法就是在一个新标签中打开链接,然后从那里获取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
有什么想法吗?可以通过ruby模块对url本身进行解码。更大的挑战是只让正确的部分离开道路。你可以这样做:
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 ;
}
URI.decode(yahoo_url).match(%r{RU=(.*)/RK}).captures
这将为您提供匹配内容的列表,因此在您的示例中,[”http://en.wikipedia.org/wiki/Something“]
但是要注意,只有当你想要的url总是在RU=之后,后面跟着/RK时,这个正则表达式才有效。scrape yahoo search?当然这不违反他们的条款;)我没有看到任何违反他们条款的事情。这正是我所需要的!谢谢