2009-10-08 7 views
3

Google 검색 결과 페이지의 전체 HTML이 있다고 가정합니다. 누구든지 Google 검색 결과의 첫 페이지를 긁거나 파싱 할 수있는 기존 코드 (Ruby?)를 알고 있습니까? 이상적으로는 어디서나 볼 수있는 쇼핑 결과 및 비디오 결과 섹션을 처리하는 것이 이상적입니다.Ruby에서 Google 검색 결과 스크래핑/파싱

그렇지 않은 경우 일반적으로 스크린 스크랩을위한 최상의 Ruby 기반 도구는 무엇입니까?

명확히하기 : Google 검색 결과를 프로그래밍 방식으로/API별로 얻는 것은 어렵거나 불가능하며 단순히 결과 페이지를 CURLing하면 많은 문제가 있음을 알고 있습니다. 여기에 stackoverflow에 대한 두 가지 점에 대한 요약이 있습니다. 제 질문은 다릅니다.

+0

Google 순위 검사기 (http://google-rank-checker.squabbel.com)를 살펴 보시기 바랍니다. 루비가 아니라 PHP로 작성되었습니다. 그러나 그것은 오픈 소스이며 필요한 모든 작업을 해결합니다. 실제로 루비에서 수정하지 않은 것 같아요. 많은 프로덕션 환경 (프로덕션 환경에서도)에서 개인적으로 PHP (콘솔 스크립트)를 사용했습니다. 어쨌든 루비로 작성한 경우에도 Google 스크랩을하면 지연 (지연, IP, DOM 구문 분석, 올바른 GET 매개 변수 보내기 등)을 할 때 PHP 코드가 유용 할 수 있습니다. – John

답변

11

이것은 매우 간단해야하며, Screen Scraping with ScrAPI 화면을 Ryan Bates가 주연해야합니다. libs를 긁지 않고도 할 수 있습니다. 단지 nokogiri과 같은 단순한 것에 충실하십시오.

업데이트 : 노코 기리의 documentation에서

:

require 'nokogiri' 
    require 'open-uri' 

    # Get a Nokogiri::HTML:Document for the page we’re interested in... 

    doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove')) 

    # Do funky things with it using Nokogiri::XML::Node methods... 

    #### 
    # Search for nodes by css 
    doc.css('h3.r a.l').each do |link| 
    puts link.content 
    end 

    #### 
    # Search for nodes by xpath 
    doc.xpath('//h3/a[@class="l"]').each do |link| 
    puts link.content 
    end 

    #### 
    # Or mix and match. 
    doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link| 
    puts link.content 
    end 
+0

그리고'link [ 'href']'를 사용하여 링크의 href를 얻을 수 있습니다;). – Dorian

+0

Ryan은 위에서 언급 한 ScrAPI와 [Nokogiri에 관한 것] (http : // railscasts)에서 하나를 긁어내는 것에 관한 두 개의 스크린 캐스트를 가지고 있습니다.co.kr/episodes/190-screen-scraping-with-nokogiri)이 답변의 코드와 비슷한 코드를 사용합니다. –

1

당신은 Mechanize로 쉽게 목표를 달성 할 수 있어야한다.

편집 : 실제로 이미 결과가있는 경우 HPricot 또는 Nokogiri 만 있으면됩니다.

+0

여러분을 환영합니다! 그리고 내 업데이 트를 참조하십시오 : 이미 결과가있는 경우 Mechanize 과잉 수 있습니다. – Avdi

5

처음부터 화면을 긁어 모으는 이유가 불분명합니다. 아마도 REST 검색 API가 더 적합할까요? 결과를 JSON 형식으로 반환하므로 구문 분석이 훨씬 쉬워지고 대역폭을 절약 할 수 있습니다. 예를 들어 검색 결과가 'foo bar'인 경우 http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=foo+bar에 GET 요청을 보내고 응답을 처리 할 수 ​​있습니다.

자세한 내용은 blog post 또는 official documentation을 참조하십시오.

+1

슬프게도 같은 결과를 반환하지 않습니다. 참조 : http://code.google.com/p/google-ajax-apis/issues/detail?id=43 –

2

내가 AJAX 검색 API를 구글 httparty +를 제안

1

내가 특정 코드 루비 모르지만이 google scraper 당신을 도울 수 있습니다. Google 검색 결과를 스크랩하고 파싱하는 온라인 도구 데모입니다. 가장 흥미로운 점은 PHP의 구문 분석 과정에 대한 설명이있는 기사이지만 Ruby와 다른 프로그래밍 언어에도 해당됩니다.

2

Google은 결과가 구조화되는 방식 (리치 스 니펫, 지식 그래프, 직접 응답 등)을 확장하면서 변화를 겪어 가면서 더욱 어려워졌습니다. Google은 이러한 복잡성의 일부를 처리하는 서비스를 구축했으며 Ruby library.

query = GoogleSearchResults.new q: "coffee" 

# Parsed Google results into a Ruby hash 
hash_results = query.get_hash