锁定老帖子 主题:使用Nokogiri解析HTML
精华帖 (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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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))) 更离谱,直接错误,返回的信息都是乱码,更不看不懂那有问题 |
|
返回顶楼 | |
发表时间: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 输出如下: 商品类别 销售排行 推荐热卖 最新商品 世博会资讯 发货信息 本店最新订单 购物必读 友情链接 |
|
返回顶楼 | |
发表时间:2009-12-28
ruby这个编码问题真是烦人,加上//IGNORE忽略掉不能转换有字符,还是有部分数据采不到
另外我觉得应该在open(url)这一步转换编码吧? 头痛,采数据这步还是用C#算了,encod == "gb2312" ? Encoding.Default.GetString(wc.DownloadData(url)) : Encoding.UTF8.GetString(wc.DownloadData(url)); |
|
返回顶楼 | |
发表时间: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" /> |
|
返回顶楼 | |
发表时间:2010-01-13
nokogiri的Nokogiri::HTML.parse(contents, nil, 'gb2312')本来就有编码参数的。还是用这个吧。Iconv转换的。有时候再jruby上不行。。
|
|
返回顶楼 | |
发表时间:2010-01-20
在windows上的 nokogiri 不需要编码信息就能正确解码中文网页,但是 ubuntu上的 nokogiri 却报编码错误,不知道为什么?回去试试加上编码参数后能不能工作。 用 iconv转出来有几个中文字符可以识别,但是不是原汁原味的了,不知道为什么。
|
|
返回顶楼 | |
发表时间: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 希望对大家有帮助 |
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2010-06-03
楼主用的开发环境是什么的?
我用NB6.8 配置nokogiri,但是没搞定。。 |
|
返回顶楼 | |