我一直在查看rubyforge上的XML和HTML库,以便将数据从网页中提取出来。例如,如果我想在stackoverflow上解析用户页面,我该如何将数据转换为可用的格式?
假设我想解析自己的用户页面以获取当前的信誉评分和徽章列表。我试图将从我的用户页面检索到的源转换为xml,但由于缺少div,转换失败。我知道我可以进行字符串比较并找到我正在寻找的文本,但必须有更好的方法来做到这一点。
我希望将其合并到一个简单的脚本中,该脚本在命令行中显示我的用户数据,并可能将其扩展为GUI应用程序。
答案 0 :(得分: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
等等。
答案 1 :(得分:5)
尝试hpricot,好吧......真棒
我已多次使用它进行屏幕抓取。
答案 2 :(得分:5)
立即使用 Nokogiri 。
答案 3 :(得分:0)
我总是非常喜欢Ilya Grigorik所写的内容,以及wrote up a nice post关于使用hpricot的内容。
我还有read this post一段时间后,它看起来对你有用。
我自己也没有,所以YMMV,但这些似乎非常有用。
答案 4 :(得分:0)
我之前尝试过这样做的事情是,很少有网页是格式良好的XML文档。 Hpricot可能能够解决这个问题(我还没有使用它)但是当我过去做一个类似的项目时(使用Python及其库的内置解析函数),它有助于有一个预处理器来清理它HTML。我使用HTML Tidy的python绑定作为这个,它使生活变得更容易。 Ruby绑定是here,但我还没有尝试过。
祝你好运!答案 5 :(得分: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]