论坛首页 编程语言技术论坛

使用Nokogiri解析HTML

浏览 16803 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (16)
作者 正文
   发表时间:2009-12-26   最后修改:2009-12-28

首先,我们需要用到nokogiri和open-uri

 

require 'nokogiri'
require 'open-uri'

 

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

doc.css('h3.r a.l').each do |link|
   puts link.content
end

 

换种方式实现:

 

 doc.xpath('//h3/a[@class="l"]').each do |link|
     puts link.content
 end

 

我们还可以这样来写:

 

 doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|
      puts link.content
 end

 

编码问题需要另行转换。

 

结果如下所示:

 

Aaron Patterson (tenderlove) on Twitter
Tender Lovemaking
Force M.D. - Tender Love Lyrics
Force MDs - Tender Love
Jordan Knight - Tender Love
Alicia Keys- Tender Love(live)
tenderlove's nokogiri at master - GitHub
Tender Love and  Care on Flickr - Photo Sharing!
USHER - TENDER LOVE LYRICS
Love Quotes - Tender Love Quotes

   发表时间:2009-12-27  
在采集的时候编码问题如何解决
rails默认用的utf-8,而我要采集的网站是gb2312
arr = [1,2,3,4,5,6,7,9]
url = "http://www.hishibo.cn?type="
arr.each do |a|
    doc = Nokogiri::HTML(open(url))
    dco.css("table.txt>tr:nth-child(1)>td").each do |c|
      puts c.content
    end
end

目标网页是gb2312编码,有些页面能采回来,有些又提示有 无效的字符编码
doc = Nokogiri::HTML(open(url))

改为
doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))

更离谱,直接错误,返回的信息都是乱码,更不看不懂那有问题
0 请登录后投票
   发表时间:2009-12-28  
wozhidao 写道
在采集的时候编码问题如何解决
rails默认用的utf-8,而我要采集的网站是gb2312
arr = [1,2,3,4,5,6,7,9]
url = "http://www.hishibo.cn?type="
arr.each do |a|
    doc = Nokogiri::HTML(open(url))
    dco.css("table.txt>tr:nth-child(1)>td").each do |c|
      puts c.content
    end
end

目标网页是gb2312编码,有些页面能采回来,有些又提示有 无效的字符编码
doc = Nokogiri::HTML(open(url))

改为
doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))

更离谱,直接错误,返回的信息都是乱码,更不看不懂那有问题

我举个例子:
    url = "http://www.hishibo.cn"
    doc = Nokogiri::HTML(open(url))
    doc.css("h3").each do |c|
      puts Iconv.iconv("GBK//IGNORE", "UTF-8//IGNORE", c.content)  
    end

输出如下:
商品类别
销售排行
推荐热卖
最新商品
世博会资讯
发货信息
本店最新订单
购物必读
友情链接
0 请登录后投票
   发表时间:2009-12-28  
ruby这个编码问题真是烦人,加上//IGNORE忽略掉不能转换有字符,还是有部分数据采不到
另外我觉得应该在open(url)这一步转换编码吧?

头痛,采数据这步还是用C#算了,encod == "gb2312" ? Encoding.Default.GetString(wc.DownloadData(url)) : Encoding.UTF8.GetString(wc.DownloadData(url));
0 请登录后投票
   发表时间:2010-01-13  
wozhidao 写道
在采集的时候编码问题如何解决
rails默认用的utf-8,而我要采集的网站是gb2312
arr = [1,2,3,4,5,6,7,9]
url = "http://www.hishibo.cn?type="
arr.each do |a|
    doc = Nokogiri::HTML(open(url))
    dco.css("table.txt>tr:nth-child(1)>td").each do |c|
      puts c.content
    end
end

目标网页是gb2312编码,有些页面能采回来,有些又提示有 无效的字符编码
doc = Nokogiri::HTML(open(url))

改为
doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))

更离谱,直接错误,返回的信息都是乱码,更不看不懂那有问题


curl http://www.hishibo.cn/
此網站原來就用utf-8吧。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

0 请登录后投票
   发表时间:2010-01-13  
nokogiri的Nokogiri::HTML.parse(contents, nil, 'gb2312')本来就有编码参数的。还是用这个吧。Iconv转换的。有时候再jruby上不行。。
0 请登录后投票
   发表时间:2010-01-20  
在windows上的 nokogiri 不需要编码信息就能正确解码中文网页,但是 ubuntu上的 nokogiri 却报编码错误,不知道为什么?回去试试加上编码参数后能不能工作。 用 iconv转出来有几个中文字符可以识别,但是不是原汁原味的了,不知道为什么。
0 请登录后投票
   发表时间:2010-03-06  
根据我最新实验的结果,使用GB18030而不是GB2312在jruby环境下更可靠,即使用如下方式编码:
page_data = Iconv.new('GB18030//IGNORE', page_encode).iconv(page_data)
doc = Nokogiri::HTML(page_data, nil, "GB18030") rescue nil

希望对大家有帮助
0 请登录后投票
   发表时间:2010-05-22  
wozhidao 写道
在采集的时候编码问题如何解决
rails默认用的utf-8,而我要采集的网站是gb2312
arr = [1,2,3,4,5,6,7,9]
url = "http://www.hishibo.cn?type="
arr.each do |a|
    doc = Nokogiri::HTML(open(url))
    dco.css("table.txt>tr:nth-child(1)>td").each do |c|
      puts c.content
    end
end

目标网页是gb2312编码,有些页面能采回来,有些又提示有 无效的字符编码
doc = Nokogiri::HTML(open(url))

改为
doc = Iconv.iconv("UTF-8","GB2312",Nokogiri::HTML(open(url)))

更离谱,直接错误,返回的信息都是乱码,更不看不懂那有问题


我按照你的这方法试过了,貌似你调用iconv的方法参数写反了,我写的如下:
doc = Iconv.iconv("GB2312//IGNORE","UTF-8//IGNORE",Nokogiri::HTML(open(url)))  

注意:如果不加IGNORE的话,会报错
.. (Iconv::IllegalSequence)
0 请登录后投票
   发表时间:2010-06-03  
楼主用的开发环境是什么的?
我用NB6.8 配置nokogiri,但是没搞定。。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics