快速业务通道

Ruby学习笔记一 安装Ruby与Ruby的爬虫应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Ruby学习笔记一 安装Ruby与Ruby的爬虫应用

时间:2010-12-17 Anemone

最近终于空下来了,所以下个Ruby玩玩,安装Ruby很简单,去官网下载一个一键 安装包既可,linux下的安装,大家Google下就有很多教程了.对于IDE网上说 NetBeans支持得很完美,但是因为本人比较喜欢Eclipse,所以还是跟大家推荐 EasyEclipse for Ruby and Rails,当然你可以选择只下RoR的插件而不弄个全新 的Eclipse.

以前一直在用Java写爬虫工具抓图片,对HttpClient包装,正则表达式处理那 个是累啊,就算弄好了工具类,有时候一会又想不起来放哪儿,但Ruby对方面包装 的就很强大,短短几十行代码就搞定了这一切:

页面获取和文件下载的方法.

util.rb: require''net/http'' defquery_url(url)  returnNet::HTTP.get(URI.parse(url)); end defsave_url(url,dir,filename)  filename=url[url.rindex(''/'')+1,url.length-1] iffilename==nil||filename.empty?  require''open-uri''  Dir.mkdir("#{dir}")ifdir!=nil&&!dir.empty? &&!FileTest.exist?(dir)  open(url)do|fin|   iftrue   File.new("#{dir}#{filename}","wb").close   open("#{dir}#{filename}","wb")do|fout|    whilebuf=fin.read(1024)do     fout.writebuf     STDOUT.flush    end   end   end  end end

抓取图片的具体应用:

require "util"
begin
  start_url = ''http://list.mall.taobao.com/1424/g-d-----40-0--1424.htm''
  while start_url != nil && !start_url.empty? do
    print "开始下载#{start_url}\n"
    content = query_url(start_url)
    next_page = content.scan(/ <a href="(.*?)" class="next-page"><span>下一页<\/span><\/a>/)
    next_url = nil
    next_url = next_page[0][0] if  next_page != nil && next_page.length > 0 && next_page[0].length > 0
    imgs = content.scan(/<img src="(http:\/\/img[\d].*?)" \/>/)
    for img in imgs
      url = img[0];
      save_url(url,"d:\\mall\\",nil)
    end
    start_url = next_url;
    #    break;
  end
end

使用一天之后感觉ruby的语法很自然,很好理解,上手比较容易,而且相关包封 装的也很好,确实比较适合拿来玩玩小程序.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号