浮游
浮游

只是一个介绍

测试Ruby抓取gem

最近有不少抓取的需求,因为之前看到Ruby写的很方便,就拿过来用了。一开始用的就是nokogiri的默认代码(就是nokogiri页面上的那个),也没进行优化和引入多线程。后面随着需求的增加和变化(例如先抓取列表页,然后详情),需要引入多线程了,看到推荐,选择了typhoeus。

忙完了,顺手测试一下目前一些gem,按照ruby-toolbox的排名随便挑几个测试一下:

单线程: rest-client,httparty,faraday,mechanize (可以支持session和cookies,自动化库)。

多线程: typhoeus,em-http-request。

测试的条件:最简单的抓取页面(不解析),分别测试10,100,200,1000次消耗的时间(通过Benchmark.bmbm统计,关于 benchmark 的文章,详见参考1)。

单线程测试结果:200个以内的Mechanize最快,500个及以上就Error:too many connection resets,按照错误来看,底层都是调用rest-client的。

多线程测试结果:200个以内,typhoeus 和 em-http-request 不相上下,500个及以上typhoeus快。

PS: 1,因为只测试了10,100,200,500,1000这几个值,因此结论也是按照这几个分界点来粗略判断的,详细的分界点需要更详细的测试(例如那个分界点之后xxx比yyy快),这里暂不涉及。

2,测试代码比较粗劣,如果有错,欢迎联系我指出。多谢。

单线程测试代码及结果:

https://gist.github.com/cashplk/7173445

多线程测试代码及结果:

https://gist.github.com/cashplk/7173472

参考文章:

1,How do I benchmark Ruby code? : 地址


Originally published at cashplk.logdown.com on October 27, 2013.

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论