2008-09-26 10 views
14

저는 웹 페이지에서 데이터를 가져 오는 간단한 방법으로 rubyforge에서 XML 및 HTML 라이브러리를 살펴 보았습니다. 예를 들어 stackoverflow에서 사용자 페이지를 구문 분석하려면 어떻게 데이터를 사용 가능한 형식으로 가져올 수 있습니까?Ruby에서 웹 페이지를 구문 분석하는 가장 좋은 방법은 무엇입니까?

현재 내 평판 점수 및 배지 목록에 대한 내 사용자 페이지를 구문 분석하고 싶습니다. 내 사용자 페이지에서 가져온 소스를 xml로 변환하려고했지만 div가 누락되어 전환이 실패했습니다. 나는 문자열을 비교할 수 있고 내가 찾고있는 텍스트를 찾을 수 있다는 것을 알고 있지만 이것을 수행하는 훨씬 더 좋은 방법이 있어야합니다.

커맨드 라인에서 내 사용자 데이터를 뱉어 내고 GUI 응용 프로그램으로 확장 할 수있는 간단한 스크립트에 이것을 통합하려고합니다. 나는 스크린 스크래핑을 위해 여러 번 사용했습니다

+0

가장 좋은 http : //modos.org/sof/? u = ??? (여기서 ???는 ID입니다. 22423입니다.) 이미 원하는대로 할 수 있습니다. 자세한 내용은 http://stackoverflow.com/questions/61553/track-your-reputation을 참조하십시오. – SCdF

답변

18

불행히도 stackoverflow는 XML이라고 주장하지만 사실 그렇지 않습니다. Hpricot 그러나이 태그 수프를 요소 트리로 구문 분석 할 수 있습니다.

require 'hpricot' 
require 'open-uri' 

doc = Hpricot(open("http://stackoverflow.com/users/19990/armin-ronacher")) 
reputation = (doc/"td.summaryinfo div.summarycount").text.gsub(/[^\d]+/, "").to_i 

등등.

0

나는 항상 Ilya Grigorik이 쓴 글을 좋아하고, 그는 hpricot 사용에 관해서 wrote up a nice post을 사용합니다.

나 또한 read this post 나는 뒤로하고 그것은 당신에게 유용 할 것 같습니다.

나 자신도 한 번도 해본 적이 없기 때문에 YMMV가 유용 할 것 같습니다.

0

이전에이 작업을 시도한 점은 형식이 올바른 XML 문서가 거의없는 것입니다. Hpricot은 그것을 다룰 수 있었지만 (필자는 그것을 사용하지 않았다.) 파이썬과 그 라이브러리가 파싱 함수를 사용하여 과거에 비슷한 프로젝트를 수행했을 때, 프리 프로세서를 사용하여 HTML. 이것으로 HTML Tidy에 파이썬 바인딩을 사용했기 때문에 훨씬 쉬워졌습니다. 루비 바인딩은 here이지만 시도하지는 않았습니다.

행운을 빈다.

0

오래된 주제 인 것처럼 보이지만 여기에는 새로운 것이 있습니다. 예 받고 평판 :

#!/usr/bin/env ruby 

require 'rubygems' 
require 'hpricot' 
require 'open-uri' 

user = "619673/100kg" 
html = "http://stackoverflow.com/users/%s?tab=reputation" 

page = html % user 
puts page 

doc = Hpricot(open(page)) 
pars = Array.new 
doc.search("div[@class='subheader user-full-tab-header']/h1/span[@class='count']").text.each do |p| 
    pars << p 
end 

puts "reputation " + pars[0] 
관련 문제