Code Golf: Google sonuçlarını ayrıştırma


16

Google'da bir şey aradığınızda, sonuçlar sayfasında kullanıcı, sonuçların ilk sayfası için yeşil bağlantılar görebilir.

Mümkün olan en kısa biçimde, bayt olarak, herhangi bir dil kullanarak, stdout'a olan bu bağlantıları bir liste şeklinde görüntüleyin. Yığın değişim sorgusunun ilk sonuçları için bir örnek:

Ekran görüntüsü yakalama

Giriş:

siz seçin: URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) veyastackexchange

Çıktı :

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

Kurallar:

  • Sonuçlar https://www.google.com ile yapılan arama ile aynı olduğu sürece URL kısaltıcılarını veya diğer arama araçlarını / API'lerini kullanabilirsiniz .

  • Programınızın bir web tarayıcısı açmak gibi yan etkileri varsa sorun olmaz, böylece şifreli Google html / js sayfaları oluşturuldukça okunabilir.

  • Tarayıcı eklentilerini, kullanıcı metinlerini kullanabilirsiniz ...

  • Stdout'u kullanamıyorsanız, ile ekrana yazdırın, örn. bir pop-up veya javascript uyarısı!

  • Bitiş / veya başlangıç ​​http'lerine ihtiyacınız yok: //

  • Başka bağlantı göstermemelisiniz

  • En kısa kod kazanır!

  • İyi şanslar !

EDIT: Bu golf 07/08/15 biter.


Kullandığınız için bunu da kullanmak google.frzorunda mıyız?
Beta Çürümesi

İstediğiniz herhangi bir Google'ı kullanabilirsiniz. Ben fransızım, bu yüzden .fr kullandım, ancak .com veya .anything kullanabilirsiniz :) Önemli değil
WayToDoor

Ve kısaltılmış URL'ler gogle.dede iyi mi?
Beta Çürümesi

Sonuçlar google.com'da arama
yapmakla

Yanıtlar:


17

Bash + grep + vaşak, 38

Bir web tarayıcısı açabileceğimiz için şunu kullanacağım lynx:

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

( grepKullanım için @manatwork'e teşekkürler sed)

URL'nin tamamını bir parametre olarak içeri aktarıyoruz:

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

Hangi listeyi verir:

resim açıklamasını buraya girin


Bu kullanışlı: D
Beta Çürümesi

3
sediyi. seduzun. GNU'yu deneyin grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork Evet, elbette - teşekkürler!
Digital Trauma

1
Cevap başlığı kopyalandı mı? ;) Hiçbiri bash, lynxveya sedartık (ve grep) coreutils bir parçasıdır.
manatwork

3
Ben de yapabilirsiniz inanıyorum: lynx -dump $1|grep -Po 'd:\K[^&]+'(denenmemiş)
Jarmex

4

Yakut, 91 77 bayt

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

Tüm requires olmadan daha kısa olurdu . ARGH !!! DÜZENLEME : Yani, çıkıyor, ben yok ikinci gerektirir gerek! @Manatwork'e bunu işaret ettiği için teşekkürler.

Eski sürüm (yararsız require):

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

Kurallar, siz de saydığınız sürece komut satırı seçeneklerinin kullanılmasına izin verir: pastebin.com/PnpjnXji (Bunun haksız bir stil olduğunu düşünüyorsanız, yalnızca kod bloğundaki değişikliği kullanmaktan çekinmeyin.)
manatwork

Açık bir şekilde yapmanız gerektiğinden emin misiniz require'uri'? 2.1.2'de URIaçık uri gerektirdikten sonra modülün kullanılabilir hale gelmesini sağlarım.
manatwork

@manatwork Teşekkür ederim! Güncellenmiş.
kirbyfan64sos

Sadece benim merakım için: benim macun alternatif benim gibi kod bloğunu değiştirmek için herhangi bir neden? (Tabii ki, sizi geride tutarsa ​​kişisel nedenleri değil, teknik nedenleri merak ediyorum.)
manatwork

@manatwork İhtiyacım var, ama şu anda bayt sayısını anlamak için çok tembeltim. :)
kirbyfan64sos

4

Wolfram Dili (Mathematica), 135

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

daha okunabilir:

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

Alanlar gerçekten gerekli mi? Onlar olmadan 136 bayt alıyorum .
kirbyfan64sos

hiç gerekli değil ... Bunu gerçekten
sıkmalıyım

Bunu kısaltmak için böyle bir cevap verebilir misiniz?
Digital Trauma

3

Python 3, 141 bayt

Digital Trauma'nın cevabının yakınında hiçbir yerde değil, ama normal ifadeyi çözmek eğlenceliydi: 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-8Program girişi için:

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'nin ucunu uygular


Gerçekten kullanmanız gerekiyor __import__mu?
ckjbgames

Ayrıca, [x for x in spam]yerine bir yapı kullanın map. Bu size çok sayıda bayt kazandıracaktır.
ckjbgames

2

Faktör, 31 bayt

Bunun için bir kütüphane var.

[ google-search [ url>> ] map ]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.