Ruby语言轻松编写网页蜘蛛_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby语言轻松编写网页蜘蛛

Ruby语言轻松编写网页蜘蛛

 2010/12/5 13:14:33  lmxbitihero  http://lmxbitihero.javaeye.com  我要评论(0)
  • 摘要:以前有一个Hpricot,不过只能在Linux下使用,后来出现了一个Nokogiri,是Hpricot的良好替代品,且有Windows下的Gem,是编写蜘蛛的必备工具。下面的代码是抓取红孩子网上商城的商品的代码,短小而精悍,充分显示了Nokogiri的强大all=Nokogiri::HTML(open('http://www.redbaby.com.cn/'))all.css('div.headSortBody_101015div.thirdLevelullia').eachdo|a
  • 标签:Ruby 网页 Ruby网页蜘蛛

以前有一个Hpricot,不过只能在Linux下使用,后来出现了一个Nokogiri,是Hpricot的良好替代品,且有Windows下的Gem,是编写蜘蛛的必备工具。

?

下面的代码是抓取红孩子网上商城的商品的代码,短小而精悍,充分显示了Nokogiri的强大

all = Nokogiri::HTML(open('http://www.redbaby.com.cn/'))
all.css('div.headSortBody_101015 div.thirdLevel ul li a').each do |a|
? url = a['href'].strip.delete("\n\t")
? begin
??? page = Nokogiri::HTML(open(url))
? rescue Exception=>err
??? p err
??? next
? end
? while page
??? page.css("div.listGoodsInner").each do |product|
????? begin
????????? p product.css("div.listGoodsName a").text.strip
????????? p product.css("div.listGoodsName a")[0]["href"]
????????? p product.css("div.listGoodsPic a img")[0]["src"]
????????? price = product.css("div.listGoodsPrice span.price02").text.strip
????????? price = price[3, price.size - 3].delete(',').to_f
????????? p price

????? rescue Exception => err
??????? p err
????? end
??? end
??? if page.css("a.right")[0] && page.css("a.right")[0]["href"]
????? page = Nokogiri::HTML(open("http://www.redbaby.com.cn/Product/" + page.css("a.right")[0]["href"].strip))
??? else
????? page = nil
??? end
? end
end

?

短短30行代码,就能把商城的所有商品都抓取下来,还能兼顾错误处理。

?

Nokogiri不单处理HTML简单快速,而且还是REXML的良好替代品,以前用Ruby处理XML时因为REXML采用Ruby语言编写,虽然简单,但是速度总是一个瓶颈,而Nokogiri的处理核心采用C语言编写,采用Nokogiri后处理速度将会有至少10倍以上的提高,从此Ruby处理XML再也没有任何可顾虑的了。

?

Nokogiri的网页地址:http://nokogiri.org/

发表评论
用户名: 匿名