Code Golf: análisis de resultados de Google


16

Cuando busca algo en Google, dentro de la página de resultados, el usuario puede ver enlaces verdes, para la primera página de resultados.

En la forma más corta posible, en bytes, usando cualquier idioma, muestre esos enlaces a stdout en forma de una lista. Aquí hay un ejemplo, para los primeros resultados de la consulta de intercambio de pila:

Una captura de pantalla

Entrada:

usted elige: la URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) o simplementestackexchange

Salida:

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

Reglas :

  • Puede usar acortadores de URL u otras herramientas de búsqueda / API siempre que los resultados sean los mismos que si busca https://www.google.com .

  • Está bien si su programa tiene efectos secundarios como abrir un navegador web para que las páginas crípticas html / js de Google se puedan leer a medida que se procesan.

  • Puede usar complementos del navegador, scripts de usuario ...

  • Si no puede usar stdout, imprímalo en la pantalla con, p. Ej. una alerta emergente o javascript!

  • No necesita el final o los http (s) iniciales: //

  • No debe mostrar ningún otro enlace.

  • ¡El código más corto gana!

  • Buena suerte !

EDITAR: Este golf termina el 07/08/15.


Ya que está usando google.fr, ¿tenemos que usar eso también?
Beta Decay

Puedes usar cualquier google que quieras. Soy francés, así que usé .fr, pero podrías usar .com o .anything :) No importa
WayToDoor

¿Y las URL acortadas como las que también gogle.deestán bien?
Beta Decay

Es posible utilizar acortadores de URL u otras herramientas de búsqueda / API siempre que los resultados serían los mismos que buscar google.com , por lo que sí
WayToDoor

66
En caso de que sea tentado: recuerde que no puede analizar HTML con expresiones regulares
Luis Mendo

Respuestas:


17

Bash + grep + lynx, 38

Como podemos abrir un navegador web, usaré lynx:

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

(Gracias a @manatwork por su grepuso en lugar de sed)

Pasamos la URL completa como parámetro:

$ ./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
$ 

Lo que da la misma lista que:

ingrese la descripción de la imagen aquí


Bueno, eso es útil: D
Beta Decay

3
sedbueno. sedlargo. Pruebe GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork Sí, por supuesto, ¡gracias!
Trauma digital

1
¿Se ha copiado el título de la respuesta? ;) Ninguno de bash, lynxo sed(y ahora grep) es parte de coreutils.
manatwork

3
Creo que también puedes hacer: lynx -dump $1|grep -Po 'd:\K[^&]+'(no probado)
Jarmex

4

Ruby, 91 77 bytes

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

Hubiera sido más corto sin todos los requires. ARGH !!! EDITAR : ¡Resulta que no necesito el segundo requerimiento! Gracias a @manatwork por señalar eso.

Versión anterior (con la inútil require):

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

Las reglas permiten el uso de las opciones de línea de comandos, siempre y cuando se cuenten también: pastebin.com/PnpjnXji (Si cree que esto es injusto estilo, no dude en utilizar sólo el cambio en el bloque de código.)
manatwork

¿Estás seguro de que necesitas explícitamente require'uri'? En 2.1.2 utilizo el URImódulo está disponible después de requerir open-uri.
manatwork

@manatwork ¡Gracias! Actualizado.
kirbyfan64sos

Solo para mi curiosidad: ¿alguna razón para no cambiar el bloque de código como en mi alternativa pastebin? (Por supuesto, tengo curiosidad por razones técnicas, no razones personales, si eso te
detiene

@manatwork Necesito hacerlo, pero era demasiado vago como para calcular el recuento de bytes en este momento. :)
kirbyfan64sos

4

Wolfram Language (Mathematica), 135

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

más legible:

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

¿Son realmente necesarios los espacios? Sin ellos, obtengo 136 bytes .
kirbyfan64sos

no es necesario en absoluto ... Realmente debería ajustar esto ..
chuy

¿Puedes hacer algo como esta respuesta para acortar esto?
Trauma digital

3

Python 3, 141 bytes

No está cerca de la respuesta de Digital Trauma, pero fue divertido resolver la expresión regular: 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))))

Para ingresar http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8las salidas del programa:

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/

Implementa la punta de grc


¿Realmente necesitas usar __import__?
ckjbgames

Además, use una [x for x in spam]construcción en lugar de map. Eso te ahorrará una buena cantidad de bytes.
ckjbgames

2

Factor, 31 bytes

Resulta que hay una biblioteca para esto.

[ google-search [ url>> ] map ]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.