코드 골프 : 구글 결과 파싱


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,...

규칙 :

  • 결과가 https://www.google.com 검색과 동일하다면 URL 단축기 또는 기타 검색 도구 / API를 사용할 수 있습니다 .

  • 프로그램에 웹 브라우저를 여는 것과 같은 부작용이있어 암호화 된 Google html / js 페이지를 렌더링 할 때 읽을 수 있습니다.

  • 당신은 브라우저 플러그인, 사용자 스크립트를 사용할 수 있습니다 ...

  • stdout을 사용할 수없는 경우 예를 들어 다음과 같이 화면에 인쇄하십시오. 팝업 또는 자바 스크립트 경고!

  • 결말 / 또는 시작 http (s) : //가 필요하지 않습니다.

  • 다른 링크를 표시해서는 안됩니다

  • 최단 코드 승리!

  • 행운을 빕니다 !

편집 :이 골프는 07/08/15를 종료합니다.


를 사용하고 있기 때문에 google.fr우리도 사용해야합니까?
Beta Decay

원하는 모든 Google을 사용할 수 있습니다. 저는 프랑스어로 .fr을 사용했지만 .com 또는 .anything을 사용할 수 있습니다. : 상관 없음
WayToDoor

그리고 단축 된 URL gogle.de도 괜찮습니까?
Beta Decay

결과가 google.com 검색과 동일한 경우 URL 단축기 또는 기타 검색 도구 / API를 사용할 수 있습니다. 예
WayToDoor

답변:


17

배쉬 + 그렙 + 스라소니, 38

웹 브라우저를 열 수 있으므로 다음을 사용합니다 lynx.

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

( grep대신 @manatwork 사용에 감사드립니다 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를 사용해보십시오 grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork 물론입니다-고마워요!
디지털 외상

1
답변 제목이 복사 되었습니까? ) 중에 bash, lynx또는 sed현재 (및 grep)로 coreutils 부분 없다.
manatwork

3
나는 또한 당신이 할 수 있다고 믿습니다 : lynx -dump $1|grep -Po 'd:\K[^&]+'(
예상치

4

루비, 91 77 바이트

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

모든 것이 없으면 더 짧았을 것 require입니다. 아! 편집 : 그래서, 두 번째 요구가 필요 하지 않습니다 밝혀졌습니다 ! 지적 해 주신 @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에서는 URIopen-uri가 필요한 후에 모듈을 사용할 수 있습니다.
manatwork

@manatwork 감사합니다! 업데이트되었습니다.
kirbyfan64sos

내 호기심을 위해서 : 내 pastebin 대안에서와 같이 코드 블록을 변경하지 않는 이유는 무엇입니까? (물론, 개인적인 이유가 아니라 기술적 이유가 궁금합니다.)
manatwork

@manatwork 필요하지만 현재 바이트 수를 파악하기에는 너무 게으르다. :)
kirbyfan64sos

4

볼프람 언어 (수학), 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

전혀 필요하지 않습니다 ... 나는 이것을 강화해야합니다 ..
chuy

이것을 줄이기 위해이 답변 과 같은 것을 할 수 있습니까 ?
디지털 외상

3

파이썬 3, 141 바이트

Digital Trauma의 대답에 가까운 곳은 없지만 정규 표현식을 해결하는 것이 재미있었습니다.

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 2016 년

또한 [x for x in spam]대신에 구문을 사용하십시오 map. 그렇게하면 좋은 바이트 수를 절약 할 수 있습니다.
ckjbgames 1

2

인자, 31 바이트

이를위한 라이브러리가 있습니다.

[ google-search [ url>> ] map ]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.