代码改变世界

ruby解析网页

2014-08-22 14:36  ruby_pirate  阅读(1293)  评论(0)    收藏  举报

本人刚开始接触ruby,对其能力尚处于探索阶段,今天工作恰巧需要用到ruby解析网页技术,经一番折腾,小有进步,记录下来以供参考。

ruby解析网页就本人目前所查而得至少两种办法,第一用”Net::HTTP”包是实现,第二用”open-uri“”nokogiri“实现。

Net::HTTP

Net::HTTP提供很多方法读取url,本人接触时日尚短,详细内容可查阅ruby标准库Net::HTTP中api介绍。

其中很重要的一点是,如果只执行GET requests的话,可以简化使用open-uri包中的OpenURI函数.

代码示例:

require 'net/http'
url = URI.parse('...')
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) {|http|
  http.request(req)
}

puts req   

示例来源

注:以上方法只是读入相关内容,而解析时需要使用正则表达式进行匹配分析。

Nokogiri

Nokogiri解析库据说比较快,而且可以通过Xpath和css方法解析,相对比较方便。但使用Nokogiri包首先需要安装其他依赖包,参见Nokogiri主页以及相应rubygem.

Nokogiri使用说明参考,其中介绍比较清晰。今天测试中发现,对于中文网页,有时需要对网页转码,否则可能出现错误,具体参见其他解决方案

代码示例:

require 'open-uri'
require 'nokogiri'

html = '...'
doc = Nokogiri::HTML(open(html).read)
#doc.encoding = 'utf-8'

doc.css('table a').each do |node|
	puts node.text
end