Code Golf:解析Google结果


16

当您在Google搜索结果中的内容页面时,用户可以看到绿色链接,显示结果的第一页。

使用任何语言,以最短的形式(以字节为单位)以列表的形式显示到stdout的那些链接。这是一个有关堆栈交换查询的第一个结果的示例:

屏幕截图

输入:

您选择:URL(www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8)还是stackexchange

输出:

french.stackexchange.com/, stackoverflow.com/, fr.wikipedia.org/wiki/Stack_Exchange_Network, en.wikipedia.org/wiki/Stack_Exchange,...

规则:

  • 您可以使用URL缩短器或其他搜索工具/ API,只要结果与搜索https://www.google.com相同即可。

  • 如果您的程序具有打开网络浏览器之类的副作用,这样可以使隐藏的Google html / js页面在呈现时可以读取,这是可以的。

  • 您可以使用浏览器插件,用户脚本...

  • 如果您不能使用标准输出,请使用例如将其打印到屏幕上。弹出窗口或JavaScript警报!

  • 您不需要结尾的/或开始的http(s)://

  • 您不应显示任何其他链接

  • 最短的代码胜出!

  • 祝好运 !

编辑:本场高尔夫球比赛于15年8月8日结束。


既然您正在使用google.fr,我们是否也必须使用它?
Beta Decay,2015年

您可以使用任何想要的Google。我是法国人,所以我使用了.fr,但是您可以使用.com或.anything :)没关系
WayToDoor 2015年

缩短网址gogle.de也可以吗?
Beta Decay's

只要结果与搜索google.com相同,就可以使用URL缩短器或其他搜索工具/ API ,因此可以
WayToDoor 2015年

Answers:


17

Bash + grep + Lynx,38岁

由于我们可以打开网络浏览器,因此我将使用lynx

lynx -dump $1|grep -Po '(?<=d:)[^&]+'

(感谢@manatwork grep代替sed

我们传入整个URL作为参数:

$ ./gr.sh "www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8"
http://stackexchange.com/
https://en.wikipedia.org/wiki/Stack_Exchange
https://twitter.com/stackexchange
https://play.google.com/store/apps/details?id=com.stackexchange.marvin
https://github.com/StackExchange/StackExchange.Redis
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
https://www.crunchbase.com/organization/stack-exchange
$ 

给出与以下列表相同的列表:

在此处输入图片说明


好吧,这很方便:D
Beta Decay

3
sed好。sed长。试试GNU grepgrep -Po '(?<=d:)[^&]+'
manatwork

@manatwork是的,当然-谢谢!
Digital Trauma 2015年

1
答案标题是否已粘贴?;的)没有限制bashlynxsed(现在grep)为的coreutils的一部分。
manatwork

3
我相信您也可以这样做:(lynx -dump $1|grep -Po 'd:\K[^&]+'
试用

4

Ruby,91 77字节

require'open-uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

如果没有所有requires,本来会更短。啊! 编辑:所以,事实证明,我需要第二个要求!感谢@manatwork指出这一点。

旧版本(无用require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

规则也允许使用命令行选项,只要您也对它们进行计数即可:pastebin.com/PnpjnXji(如果您觉得这是不公平的风格,请随意使用代码块中的更改。)
manatwork

您确定需要明确require'uri'吗?在2.1.2中,我使用URI需要open-uri后可用的模块。
manatwork

@manatwork谢谢!更新。
kirbyfan64sos

出于我的好奇心:是否有任何理由不像我的pastebin替代方案那样更改代码块?(当然,我对技术原因而不是个人原因感到好奇,如果这
会使

我需要@manatwork,但是我现在懒得弄清楚字节数。:)
kirbyfan64sos 2015年

4

Wolfram语言(Mathematica),135

StringJoin/@(Cases[URLExecute["www.google.com/search",{"q"->#},"XMLObject"],XMLElement["cite",_,l_]:>l,-1]/.XMLElement["b",_,{s_}]:>s)&

更具可读性:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)

这些空间真的必要吗?没有它们,我将获得136个字节
kirbyfan64sos 2015年

完全没有必要...我真的应该收紧这个..
chuy

您可以做这样的回答来缩短这个时间吗?
Digital Trauma 2015年

3

Python 3,141个字节

Digital Trauma的答案遥遥无期,但解决正则表达式很有趣:D

import re
print('\n'.join(map(lambda x:x[3:],re.findall('te>http[s]?://\w+\.[a-z]+[](/a-z\.)?]+',__import__("requests").get(input()).text))))

输入http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8程序输出:

https://en.wikipedia.org/wiki/
https://twitter.com/
https://play.google.com/store/apps/details?id...
https://www.crunchbase.com/organization/
https://www.facebook.com/
https://github.com/

实现grc的技巧


您真的需要使用__import__吗?
ckjbgames

另外,请使用[x for x in spam]构造代替map。这样可以节省大量字节。
ckjbgames

2

因子,31字节

碰巧有一个图书馆。

[ google-search [ url>> ] map ]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.