Ruby中的Mechanize的使用教程
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("http://google.com").save_as
小技巧
puts Mechanize::AGENT_ALIASES 可以打印出所有可用的user_agent
puts Mechanize.instance_methods(false) 输出Mechanize模块的所有方法
puts Mechanize.instance_methods() 输出Mechanize模块的所有方法以及所继承的类的函数
相关推荐
-
python中mechanize库的简单使用示例
复制代码 代码如下: #!/usr/bin/env/ python#coding=utf-8import mechanizeimport cookielib # Cookie Jarcj = cookielib.LWPCookieJar() # Browserbr = mechanize.Browser()br.set_cookiejar(cj) # Browser optionsbr.set_handle_equiv(True)br.set_handle_gzip(True)br.set_ha
-
Python使用Mechanize模块编写爬虫的要点解析
mechanize是对urllib2的部分功能的替换,能够更好的模拟浏览器行为,在web访问控制方面做得更全面.结合beautifulsoup和re模块,可以有效的解析web页面,我比较喜欢这种方法. 下面主要总结了使用mechanize模拟浏览器的行为和几个例子(谷歌搜索,百度搜索和人人网登录等) 1.初始化并建立一个浏览器对象 如果没有mechanize需要easy_install安装,以下代码建立浏览器对象并作了一些初始化设置,实际使用过程可以按需开关.其实只用默认的设置也
-
在Python中使用mechanize模块模拟浏览器功能
知道如何快速在命令行或者python脚本中实例化一个浏览器通常是非常有用的. 每次我需要做任何关于web的自动任务时,我都使用这段python代码去模拟一个浏览器. import mechanize import cookielib # Browser br = mechanize.Browser() # Cookie Jar cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) # Browser options br.set_handle_eq
-
Ruby中使用mechanize批量下载校内网相册照片
自己闲来无事,用mechanize做了一个可以下载校内相册照片的代码. 写的有些简陋....主要是根据相册的地址来分析用户ID和相册ID,然后模拟请求相册页面,并提取所有照片,然后下载到本地的一个文件夹中. ruby版本:ruby1.8.7 or ruby1.9.2 操作系统:windows 7 Linux下没有试过~不过应该也可以的: 复制代码 代码如下: #encoding: utf-8 require 'rubygems' require 'mechanize' class Renren
-
Ruby中的Mechanize的使用教程
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 => 'Ne
-
在Ruby中处理日期和时间的教程
Time 类在 Ruby 中用于表示日期和时间.它是基于操作系统提供的系统日期和时间之上.该类可能无法表示 1970 年之前或者 2038 年之后的日期. 本教程将让您熟悉日期和时间的所有重要的概念. 创建当前的日期和时间 下面是获取当前的日期和时间的简单实例: #!/usr/bin/ruby -w time1 = Time.new puts "Current Time : " + time1.inspect # Time.now 是一个同义词 time2 = Time.now put
-
在Ruby中处理XML和XSLT以及XPath的简单教程
什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种. SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍,在扫描
-
利用RJB在Ruby on Rails中使用Java代码的教程
开始之前 关于本教程 Ruby on Rails (Rails) 是用 Ruby 编写的一个 full-stack Web 应用程序框架,而 Ruby 是一种功能丰富的.免费的.可扩展的.可移植的.面向对象的脚本编制语言.Rails 在 Web 应用程序开发人员之间非常流行.通过它,可以快速有效地开发 Web 应用程序,并将其部署到任何 Web 容器中,例如 IBM? WebSphere? 或 Apache Tomcat. 在 Rails 和类似的 Web 应用程序开发框架出现之前,用于 Web
-
Ruby程序中正则表达式的基本使用教程
Ruby大部分的内置类型都和其它的编程语言很相似.主要有strings,integers,floats,arrays等等.然而,只有脚本语言,如Ruby,Perl,和awk等提供了内置表达式类型的支持.正则表达式尽管比较隐蔽,但却是一个很强大的文本处理工具. 正则表达式是使用指定的模式匹配字符串的一种简单的方法.在Ruby中,创建正则表达式的典型方式是把模式写在两个斜线之间/pattern/. 毕竟,Ruby就是Ruby,正则表达式也是对象,也能像对象般操作. 例如,你可以使用下面的正则表达式写
-
在Ruby中处理文件的输入和输出的教程
Ruby 提供了一整套 I/O 相关的方法,在内核(Kernel)模块中实现.所有的 I/O 方法派生自 IO 类. 类 IO 提供了所有基础的方法,比如 read. write. gets. puts. readline. getc 和 printf. 本章节将讲解所有 Ruby 中可用的基础的 I/O 函数.如需了解更多的函数,请查看 Ruby 的 IO 类. puts 语句 在前面的章节中,您赋值给变量,然后使用 puts 语句打印输出. puts 语句指示程序显示存储在变量中的值.这将在
-
简单的Ruby中的Socket编程教程
Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持. Ruby 统一支持应用程的网络协议,如FTP.HTTP等. 不管是高层的还是底层的.ruby提供了一些基本类,让你可以使用TCP,UDP,SOCKS等很多协议交互,而不必拘泥在网络层.这些类也提供了辅助类,让你可以轻松的对服务器进行读写. 接下来就让我们来学习如何进行 Ruby Socket 编程 什么是 Sockets 应用层通过传输层进行数据通信时,TCP和U
-
Ruby中的block代码块学习教程
1.什么是代码块 在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用.例如: [1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts i end 块变量:以yield关键字调用block也可以传递参数,block中竖线(|)之间给出的参数名用于接收来自yield的参数. 竖线之间(如上例中的 | i |)的变量被称作块变量,作用和一
-
Ruby中任务构建工具rake的入门学习教程
Rake简介 Rake的意思是Ruby Make,一个用ruby开发的代码构建工具. 但是,为什么Ruby需要Rake? 按理说Ruby代码无需编译,应该不需要Rake才对呀?原来,Rake另有妙用,即把Rake当做一个任务管理工具来使用...这样做有两个好处: 1.以任务的方式创建和运行脚本 当然,你可以用脚本来创建每一个你希望自动运行的任务.但是,对于大型的应用来说,你几乎总是需要为数据库迁移(比如Rails中db:migrate任务).清空缓存.或者代码维护等等编写脚本.对于每一项任务,你
随机推荐
- javascript+jQuery实现360开机时间显示效果
- IO多路复用之epoll全面总结(必看篇)
- 轻松掌握JavaScript状态模式
- javascript 隐藏/显示指定的区域附HTML元素【legend】用法
- 判断JS对象是否拥有某属性的方法推荐
- php在字符串中查找另一个字符串
- 解析MySQL中存储时间日期类型的选择问题
- js制作简易年历完整实例
- 自动备份mssql server数据库并压缩的批处理脚本
- CMD命令行将当前磁盘所有文件名写入到文本文件的方法
- 有关jQuery中parent()和siblings()的小问题
- MSSQL 2008 自动备份数据库的设置方法
- SQLserver查询数据类型为ntext是空或NULL值的方法
- 刀片服务器五大误区解读
- qTip 基于JQuery的Tooltip插件[兼容性好]
- 状态栏显示欢迎信息的脚本特效
- Java concurrency之AtomicLong原子类_动力节点Java学院整理
- 详解Java的线程的优先级以及死锁
- js实现改进的仿蓝色论坛导航菜单效果代码
- C#实现利用泛型将DataSet转为Model的方法