14

我一直在 ruby​​forge 上查看 XML 和 HTML 库,以寻找一种从网页中提取数据的简单方法。例如,如果我想在 stackoverflow 上解析用户页面,如何将数据转换为可用格式?

假设我想解析我自己的用户页面以获取我当前的声誉分数和徽章列表。我试图将从我的用户页面检索到的源转换为 xml,但由于缺少 div,转换失败。我知道我可以进行字符串比较并找到我正在寻找的文本,但必须有更好的方法来做到这一点。

我想将其合并到一个简单的脚本中,该脚本在命令行中输出我的用户数据,并可能将其扩展为 GUI 应用程序。

4

6 回答 6

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

等等。

于 2008-09-26T03:41:45.013 回答
5

试试hpricot,它很好……太棒了

我已经多次使用它进行屏幕抓取。

于 2008-09-26T03:35:19.817 回答
5

Hpricot结束了!

现在使用Nokogiri

于 2014-01-30T14:32:45.497 回答
0

我一直很喜欢 Ilya Grigorik 写的东西,他写了一篇关于使用 hpricot 的好文章。

不久前我也读过这篇文章,看起来它对你很有用。

我自己也没做过,所以 YMMV 但这些看起来非常有用。

于 2008-09-27T17:33:29.813 回答
0

我之前尝试这样做时遇到的问题是很少有网页是格式良好的 XML 文档。Hpricot 可能能够处理这个问题(我没有使用过),但是当我过去做一个类似的项目时(使用 Python 及其库的内置解析函数),它有助于有一个预处理器来清理HTML。我为此使用了HTML Tidy的 python 绑定,它使生活变得更加轻松。Ruby 绑定在这里,但我还没有尝试过。

祝你好运!

于 2008-09-27T19:59:44.613 回答
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]
于 2013-04-16T15:17:08.797 回答