- 浏览: 3015205 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
记得我最初开始用Nokogiri就是因为Mechanize用的HTML/XML解析器从Hpricot转到了Nokogiri。不过Nokogiri用起来问题多多,内存泄漏的问题貌似一直没解决,之前在1.9上想用的时候也是segfault,然后对格式不良好的HTML的解析也有问题。虽说_why离开了人们的视野,但在whymirror上还能找到why留在github的代码,包括当前版本的Hpricot;通过RubyGems也还能安装到Hpricot。
最近在写某脚本的时候又被Nokogiri绊倒了,一怒,决定把机上的Mechanize的html_parser换回到Hpricot去。之前NS老兄已经这么做过一次,向他咨询了经验后,这改造工程顺利完成。下面把步骤记下来。
这次测试的机器上,我安装的是RubyInstaller Technology Preview2的1.8.6-p383,安装到C:\Ruby。这个新的RubyInstaller装的Ruby上要安装Hpricot得先把devkit也装上才行,为了构建Hpricot用。下载devkit-3.4.5r3-20090411.7z,解压到Ruby的安装目录,然后从devkit目录里的MSys来完成后面需要命令行的步骤。通过
可以安装到Mechanize 0.9.3,然后同样
可以安装到Hpricot 0.8.2。
如果是用老的官方版RubyInstaller装的Ruby 1.8.6则不需要devkit,直接用RubyGems就能装上Hpricot。如果你用的是自己构建出来的Ruby的话想必这些gem要怎么构建也该了解。下面描述的步骤也对应非Windows用户,因为只涉及纯Ruby代码的修改。
都装好之后,把下面提到的几个地方改过来:(注释里的是原本的代码,上面是新改的代码)
C:\Ruby\lib\ruby\gems\1.8\specifications\mechanize-0.9.3.gemspec
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\mechanize.gemspec
(这两个文件里有多处相同的代码要改,不放心的话在文件里搜一下吧)
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize.rb
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize\page.rb
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize\util.rb
Mechanize的设计原本就考虑到了html_parser的切换,所以改起来并不费力。只是page.rb和util.rb里显式写了Nokogiri::HTML这点让人郁闷,要是去掉了require 'nokogiri'这些代码就会抱怨Nokogiri常量未定义。
幸好改造前先问了NS,不然我大概不知道要去改gemspec里的配置。以前一直没了解过RubyGems是怎么工作的orz
091109更新:刚试了在JRuby 1.4.0上用同样方式改造Mechanize让它用Hpricot 0.8.2-java来做html_parser,暂时没遇到什么问题。终于又可以在JRuby上用Mechanize了,泪目 TvT
0.8.2到0.9.1是指Hpricot?那我先不要升级……
parser默认是Hpricot是指什么?新版Mechanize么?这个月都没升级过gems没留意动态 T T
嗯我知道……话说这么改造了之后我要试试以前写的几个用Nokogiri出问题的脚本会不会就没事了
最近在写某脚本的时候又被Nokogiri绊倒了,一怒,决定把机上的Mechanize的html_parser换回到Hpricot去。之前NS老兄已经这么做过一次,向他咨询了经验后,这改造工程顺利完成。下面把步骤记下来。
这次测试的机器上,我安装的是RubyInstaller Technology Preview2的1.8.6-p383,安装到C:\Ruby。这个新的RubyInstaller装的Ruby上要安装Hpricot得先把devkit也装上才行,为了构建Hpricot用。下载devkit-3.4.5r3-20090411.7z,解压到Ruby的安装目录,然后从devkit目录里的MSys来完成后面需要命令行的步骤。通过
gem install mechanize
可以安装到Mechanize 0.9.3,然后同样
gem install hpricot
可以安装到Hpricot 0.8.2。
如果是用老的官方版RubyInstaller装的Ruby 1.8.6则不需要devkit,直接用RubyGems就能装上Hpricot。如果你用的是自己构建出来的Ruby的话想必这些gem要怎么构建也该了解。下面描述的步骤也对应非Windows用户,因为只涉及纯Ruby代码的修改。
都装好之后,把下面提到的几个地方改过来:(注释里的是原本的代码,上面是新改的代码)
C:\Ruby\lib\ruby\gems\1.8\specifications\mechanize-0.9.3.gemspec
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\mechanize.gemspec
s.add_runtime_dependency(%q<hpricot>, [">= 0.8.2"]) # s.add_runtime_dependency(%q<nokogiri>, [">= 1.2.1"]) # ... s.add_dependency(%q<hpricot>, [">= 0.8.2"]) # s.add_dependency(%q<nokogiri>, [">= 1.2.1"])
(这两个文件里有多处相同的代码要改,不放心的话在文件里搜一下吧)
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize.rb
require 'hpricot' # require 'nokogiri'
@html_parser = Hpricot # @html_parser = Nokogiri::HTML
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize\page.rb
def parser return @parser if @parser if body && response #if mech.html_parser == Nokogiri::HTML # @parser = mech.html_parser.parse(html_body, nil, @encoding) #else @parser = mech.html_parser.parse(html_body) #end end @parser end
C:\Ruby\lib\ruby\gems\1.8\gems\mechanize-0.9.3\lib\www\mechanize\util.rb
def to_native_charset(s, code=nil) #if Mechanize.html_parser == Nokogiri::HTML # return unless s # code ||= detect_charset(s) # Iconv.iconv("UTF-8", code, s).join("") #else s #end end def from_native_charset(s, code) #if Mechanize.html_parser == Nokogiri::HTML # return unless s # Iconv.iconv(code, "UTF-8", s).join("") #else s #end end
Mechanize的设计原本就考虑到了html_parser的切换,所以改起来并不费力。只是page.rb和util.rb里显式写了Nokogiri::HTML这点让人郁闷,要是去掉了require 'nokogiri'这些代码就会抱怨Nokogiri常量未定义。
幸好改造前先问了NS,不然我大概不知道要去改gemspec里的配置。以前一直没了解过RubyGems是怎么工作的orz
091109更新:刚试了在JRuby 1.4.0上用同样方式改造Mechanize让它用Hpricot 0.8.2-java来做html_parser,暂时没遇到什么问题。终于又可以在JRuby上用Mechanize了,泪目 TvT
评论
7 楼
zhengb66
2011-03-04
不错,还是Hpricot好用,速度又快,但最好用0.84版,0.83段溢出太严重。
6 楼
RednaxelaFX
2009-12-29
yuan 写道
0.8.2到最新的0.9.1不知道是有bug还是把api改了,调用像这样的方法page.links.text('linkxx')会报告 undefined method text in array!%$!@#$
我卸了装0.8.1就没问题了,而且parser默认是hpricot了。
我卸了装0.8.1就没问题了,而且parser默认是hpricot了。
0.8.2到0.9.1是指Hpricot?那我先不要升级……
parser默认是Hpricot是指什么?新版Mechanize么?这个月都没升级过gems没留意动态 T T
5 楼
yuan
2009-12-29
0.8.2到最新的0.9.1不知道是有bug还是把api改了,调用像这样的方法page.links.text('linkxx')会报告 undefined method text in array!%$!@#$
我卸了装0.8.1就没问题了,而且parser默认是hpricot了。
我卸了装0.8.1就没问题了,而且parser默认是hpricot了。
4 楼
yuan
2009-12-29
哇靠,改完连编码都自动变了……原来的乱码是Nokogiri搞的啊。
3 楼
yuan
2009-12-29
正好需要,试一下。
另外,FX有没其它ruby的抓网页工具组合推荐?
不知道mechanize能不能执行javascript……如果不能的话,导航就悲剧了。
另外,FX有没其它ruby的抓网页工具组合推荐?
不知道mechanize能不能执行javascript……如果不能的话,导航就悲剧了。
2 楼
RednaxelaFX
2009-11-08
night_stalker 写道
现在的 Mechanize 是 tenderlove (nokogiri 作者) 在维护…… 她比较阴险……
嗯我知道……话说这么改造了之后我要试试以前写的几个用Nokogiri出问题的脚本会不会就没事了
1 楼
night_stalker
2009-11-08
现在的 Mechanize 是 tenderlove (nokogiri 作者) 在维护…… 她比较阴险……
发表评论
-
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21365(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
RubyConf notes
2011-11-08 19:10 0symmetric coroutine Fiber#trans ... -
ShanghaiOnRails第八次线下活动——你不需要知道的Ruby实现
2010-11-12 15:39 2787上个月底正好赶上参加了ShanghaiOnRails 第八次线 ... -
JRuby的运行模式
2010-11-01 11:21 0// 老的JRuby还是用org.jruby.evaluato ... -
你不需要知道的Ruby草稿
2010-10-27 11:25 0一些Ruby实现 Ruby 1.8 树遍历解释 Ruby 1 ... -
Ruby里的fiber/coroutine例子
2010-01-26 18:33 0Ruby 1.9开始支持fiber。与“fiber”一词的一般 ... -
JRuby使用技巧收集
2009-12-28 09:35 0java.lang.Thread.new { puts &qu ... -
特殊类型的eigenclass
2009-12-17 03:39 0Fixnum的实例没有eigenclass true、fals ... -
奇怪的参数
2009-12-08 02:25 0默认参数与闭包的组合 真正的问题不是只是默认参数看起来很诡异, ... -
MacRuby的执行模式
2009-12-07 07:41 0mailing-list macruby-devel http ... -
Rubinius的执行模型
2009-12-05 15:22 0Rubinius wants to help YOU make ... -
Ruby 1.8和1.9中String#hash的实现
2009-11-22 18:23 01.8 string.c int rb_str_hash(s ... -
To囧:拿你来测测Watir...
2009-11-21 22:38 3394iaimstar 写道@RednaxelaFX 你最近ruby ... -
[标题党] MagLev中GC类的真相……
2009-11-21 14:46 0注意到本文的标题:我是说“GC类”的真相,不是说GC的真相哦~ ... -
小试rubyzip的一个脚本
2009-11-17 20:42 3403呼,今天开始3天都是新人培训,总算可以抽点时间发一帖。 现在在 ... -
爬一下Google和百度看口碑对它们做的SEO效果如何
2009-11-09 00:27 0#!/usr/bin/env ruby require ... -
使用新的RubyInstaller
2009-11-07 02:37 0Hpricot的安装需要编译,需要devkit -
Ruby metaprogramming tech notes
2009-09-28 15:39 0class Builder def self.build ... -
在Windows上使用Wilson
2009-09-18 19:47 2906之前被NS老兄激起了兴 ...
相关推荐
mechanize_guanacast 用于下载所有 guanacasts 的网络抓取工具 :) 要使用它,首先执行: gem install mechanize 然后使用它:ruby mechanize_guanacast.rb
ruby mechanize包,mechanize-2.7.3.gem
ruby mechanize 2.7.2 gem 包
Mechanize相关资料
multi-mechanize-master
ruby mechanize安装需要的gem包,安装需要的本地gem文件
用python成为顶级黑客,第三方库必备,mechanize网络爬虫
mechanize是对urllib2的部分功能的替换,能够更好的模拟浏览器行为,在web访问控制方面做得更全面。结合beautifulsoup和re模块,可以有效的解析web页面,我比较喜欢这种方法。 下面主要总结了使用mechanize模拟...
Mechanize 一个让自动化web交互变得容易的ruby库
Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 安装 代码如下: sudo gem install mechanize 抓取网页 代码如下: require ‘rubygems’ require ‘mechanize’ agent = Mechanize.new page = agent.get...
mechanize-源码.rar
机械化描述Mechanize库用于自动与网站进行交互。 Mechanize自动存储和发送Cookie,遵循重定向,并可以遵循链接和提交表单。 可以填写和提交表单字段。 机械化还可以将您曾经访问过的站点作为历史记录进行跟踪。依存...
Mechanize自动存储和发送Cookie,跟随重定向,跟随链接并提交表单。 可以填写和提交表单字段。 机械化还可以将您曾经访问过的站点作为历史记录进行跟踪。入门在根文件夹中,您可以运行get_page示例: node examples...
Mechanize¶↑docs.seattlerb.org/mechanize github.com/sparklemotion/mechanize描述¶↑Mechanize库用于自动与网站交互。 Mechanize自动存储和发送coo Mechanize¶↑docs.seattlerb.org/mechanize github....
python mechanize可以方便的模拟URL的访问,测试时的必要工具。
import mechanize import cookielib # Browser br = mechanize.Browser() # Cookie Jar cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) # Browser options br.set_handle_equiv(True) br.set_handle_gzip(True...
WWW-Mechanize-Chrome:自动化Chrome浏览器
# Browserbr = mechanize.Browser()br.set_cookiejar(cj) # Browser optionsbr.set_handle_equiv(True)br.set_handle_gzip(True)br.set_handle_redirect(True)br.set_handle_referer(True)br.se