- 浏览: 3049501 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (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 21495(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 2843上个月底正好赶上参加了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 3443iaimstar 写道@RednaxelaFX 你最近ruby ... -
[标题党] MagLev中GC类的真相……
2009-11-21 14:46 0注意到本文的标题:我是说“GC类”的真相,不是说GC的真相哦~ ... -
小试rubyzip的一个脚本
2009-11-17 20:42 3459呼,今天开始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 2994之前被NS老兄激起了兴 ...
相关推荐
The_official_source_code_for_the_python-mechanize__mechanize
mechanize_guanacast 用于下载所有 guanacasts 的网络抓取工具 :) 要使用它,首先执行: gem install mechanize 然后使用它:ruby mechanize_guanacast.rb
Mechanize是一个强大的自动化Web浏览器库,主要用于Python编程语言。它允许程序员模拟用户在网站上的交互行为,如填写表单、点击链接、处理cookies等,是进行网页抓取和自动化测试的重要工具。在这个名为“Mechanize...
Ruby Mechanize 是一个非常强大的 Ruby 库,用于自动化与网站的交互,比如模拟浏览器操作、填写表单、点击链接等。在使用 Ruby Mechanize 之前,首要任务是正确安装其依赖的 gem 包。以下是对 Ruby Mechanize 安装...
ruby mechanize包,mechanize-2.7.3.gem
"multi-mechanize-master" 是一个开源项目,主要基于Python的`mechanize`库进行多线程爬虫操作。`mechanize`库是一个模拟浏览器行为的库,它可以帮助开发者编写自动化脚本,用于浏览网页、填写表单、点击链接等任务...
ruby mechanize 2.7.2 gem 包
让我们深入了解一下Mechanize库的核心功能和使用方法。 首先,Mechanize库提供了一个友好的API,可以方便地打开URL、导航页面和处理HTTP请求。通过`Mechanize.new`创建一个新的实例后,你可以使用`get`方法来访问...
《深入解析mechanize:Python网页爬虫利器》 在Python的世界里,mechanize库是一个强大的工具,专为模拟浏览器行为而设计,尤其适用于自动化Web浏览和数据抓取任务。"mechanize-源码.rar"这个压缩包文件包含了...
用python成为顶级黑客,第三方库必备,mechanize网络爬虫
Python Mechanize是一个强大的库,主要用于自动化Web浏览,它在Python编程中扮演着重要角色,尤其在Web爬虫和网页测试领域。Mechanize库模仿浏览器的行为,允许开发者以编程方式与网页交互,如填写表单、点击链接、...
Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 安装 代码如下: sudo gem install mechanize 抓取网页 代码如下: require ‘rubygems’ require ‘mechanize’ agent = Mechanize.new page = agent.get...
**机械师4j(mechanize4j)**是一个基于Java的开源爬虫库,它为Web自动化提供了方便。在编程领域,爬虫是用于自动抓取网页信息的工具,而mechanize4j则是这类工具的一个实现。该库模仿了Python的mechanize库,使得...
机械化描述Mechanize库用于自动与网站进行交互。 Mechanize自动存储和发送Cookie,遵循重定向,并可以遵循链接和提交表单。 可以填写和提交表单字段。 机械化还可以将您曾经访问过的站点作为历史记录进行跟踪。依存...
Mechanize自动存储和发送Cookie,跟随重定向,跟随链接并提交表单。 可以填写和提交表单字段。 机械化还可以将您曾经访问过的站点作为历史记录进行跟踪。入门在根文件夹中,您可以运行get_page示例: node examples...
mechanize模块是一个强大的工具,它提供了模拟浏览器的功能,包括处理表单提交、跟踪cookies和设置代理等。下面我们将详细探讨mechanize模块的使用方法。 首先,引入必要的库: ```python import mechanize import ...
这个资源是mechanize库的0.3.2版本,专为Python 2构建,支持多种平台。其以whl(wheel)格式提供,这是一种预编译的Python软件包,可以简化安装过程,避免了编译源代码的步骤。 在Python开发中,mechanize库主要...
在Python编程中,开发Web爬虫时,常常会用到Mechanize模块,它是一个强大的库,用于模拟浏览器行为,特别是在处理登录、表单提交和交互性较强的网站时。Mechanize提供了对HTTP请求的控制,使爬虫能更好地模仿用户...
Mechanize¶↑docs.seattlerb.org/mechanize github.com/sparklemotion/mechanize描述¶↑Mechanize库用于自动与网站交互。 Mechanize自动存储和发送coo Mechanize¶↑docs.seattlerb.org/mechanize github....
**WWW-Mechanize-Chrome** 是一个Perl模块,它扩展了流行的WWW-Mechanize库,使其能够模拟用户在Google Chrome浏览器中的交互行为。这个工具对于自动化网页浏览、数据抓取、测试以及任何需要与网页进行复杂交互的...