• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[Ruby]使用Ruby抓取网页及加工处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

并不是专业做网页抓取的爬虫的,只是之前在一个做的挺烂的网站上帮人刷票起步逐渐学习了网页抓取的工具。
最初的时候是用Python的urllib2,拿到网页当文本处理,后来才在论坛上看到有BeautifulSoap这种级别的神器,Python处理起这种来实在是方便,可惜后来我遇到了Ruby及Rails,从此移情别恋,乃至读了Metaprogramming Ruby后更是喜欢的不要不要的。
最近工作压力不大,闲来无事便想抓取一下股市的一些数据。首先遇到的一个问题便是从哪里拿到上市和深市所有的股票代码,即便网上有现成的列表我也想着用程序抓取加工一下才显得牛逼,所以我找到了这个网页:http://quote.eastmoney.com/stocklist.html
看完之后就觉得其实代码并不复杂,只是第一次用Ruby来抓取网页不熟悉,不知道用什么工具以及怎么用而已,经过一番搜索要用到open-uri及Nokogiri。
首先来看一下open-uri,这个是Ruby内建的功能。要想使用open-uri只需要在代码中加入require 'open-uri'即可,使用起来也很简单。

1 open("http://www.ruby-lang.org/en") {|f|
2     f.each_line {|line| p line}
3     p f.base_uri         # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
4     p f.content_type     # "text/html"
5     p f.charset          # "iso-8859-1"
6     p f.content_encoding # []
7     p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002
8 }

 


open函数提供的文件对象经过了扩展,混入了一些网页的元信息。
打开网页的时候也可以带入User-Agent等选项,用起来也很方便,如下即可

1 open("http://www.ruby-lang.org/en/",
2     "User-Agent" => "Ruby/#{RUBY_VERSION}",
3     "From" => "[email protected]",
4     "Referer" => "http://www.ruby-lang.org/") {|f|
5     # ...
6 }

 

Nokogiri是一个gem,据说在此之前还有另一个工具Hpricot,只是简单了解了一下,并不赘述。
首先是Nokogiri读取网页内容,可以用两个方法:
doc = Nokogiri::HTML(open(url)),用这个方法如果有字符集的问题,则可以使用doc = Nokogiri::HTML.parse(open(url), nil, "gb2312")来指定字符集。
其次是定位网页元素,Nokogiri支持XPATH也支持CSS查找。简单介绍几种通过CSS定位的方法:
doc.css('a') 返回网页所有的a标签元素
doc.css('.myclass div ul') 返回所有css样式为myclass下的div的ul标签元素
doc.css('div#main') 返回id为main的div标签元素
上面的内容基本能解决90%的需求了,如果真的用起来还需要问Google老师。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用Rbenv安装Ruby发布时间:2022-07-14
下一篇:
php,python,ruby,perl的优缺点?发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap