Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 安装
sudo gem install mechanize
抓取网页
require 'rubygems'
require 'mechanize'
agent = Mechanize.new
page = agent.get('http://google.com/')
模拟点击事件
page = agent.page.link_with(:text =>'News').click
模拟表单提交
google_form = page.form('f')
google_form["q"] = 'ruby mechanize'
page = agent.submit(google_form, google_form.buttons.first)
pp page
分析页面,mechanize用的是nokogiri解析网页的,所以可以参照nokogiri的文档
table = page.search('a')
text = table.inner_text
puts text
有几点注意的地方: 如果需要先登录的网页,那么可以在网站先登录,登录后记录JSESSIONID,然后赋值给agent
cookie = Mechanize::Cookie.new("JSESSIONID", "BA58528B76124698AD033EE6DF12B986:-1")
cookie.domain = "datamirror.csdb.cn"
cookie.path = "/"
agent.cookie_jar.add!(cookie)
如果需要保存网页,使用.save_as,(或许save也可以,我没试过)例如
agent.get("google.com").save_as
具体原因如下:
1、抓取网页本身接口
相比其他静态编程语言,如java、c#、c++,python抓取网页文档的接口更简洁,相比其他动态脚本语言,如shell、perl,python的urlib2包提供了较为完整的访问网页文档的api,当然,ruby也是很好的选择。
抓取网页有时需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。
这是我们需要模拟user
agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
2、网页抓取后的处理
抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。
python语言在linux上很强大,语言也非常简单。
快速开发:唯一能和python比开发效率的语言只有rudy,语言简洁,没有那么多技巧,所以读起来也更容易。
跨平台:由于python的开源,它比java更能体现“一次编写到处运行”。
解释性:无须编译,直接运行/调试代码。
构架选择太多:gui构架方面,主要的就有wxpython、tkinter、pygkt、pyqt。
爬虫一般是指网络资源的抓取,因为python的脚本特性,python易于配置,对字符的处理也非常灵活,加上python有丰富的网络抓取模块,所以两者经常联系在一起。 简单的用python自己的urllib库也可以用python写一个搜索引擎,而搜索引擎就是一个复杂的爬虫。从这里你就了解了什么是Python爬虫,是基于Python编程而创造出来的一种网络资源的抓取方式,Python并不是爬虫。Python为什么适合些爬虫?
1)抓取网页本身的接口
相比与其他静态编程语言,如java,c#,C++,python抓取网页文档的接口更简洁相比其他动态脚本语言,如perl,shell,python的urllib2包提供了较为完整的访问网页文档的API。(当然ruby也是很好的选择)
此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这是我们需要模拟user agent的行为构造合适的请求,譬如模拟用户登陆、模拟session/cookie的存储和设置。在python里都有非常优秀的第三方包帮你搞定,如Requests,mechanize
2)网页抓取后的处理
抓取的网页通常需要处理,比如过滤html标签,提取文本等。python的beautifulsoap提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。
其实以上功能很多语言和工具都能做,但是用python能够干得最快,最干净。Life is short, u need python.