在信息大爆炸的互联网,数据多的烦不胜数,想要人为的统计某类信息,恐怕越来越难了,这时候就需要爬虫的帮助了,一如 360 爬取百度的百科、知道
,一淘爬取各大电商的产品、用户评论
,百姓网从赶集网页面上收集其用户公开的 QQ 邮箱并发送推广邮件
。。。
随着爬虫的发展,已经严重危害了目标网站的服务质量及数据安全,于是他们开始各种围追堵截。道高一尺魔高一丈,我们的爬虫终究能够突破层层壁垒,拿到想要的数据。
今天,我们就做一件事,让爬虫更智能。一般的服务器都会判断访问来源的 User-Agent
,适时的更换一下你的 User-Agent
,无非是个明智之举。
Gem useragents
,已经为您封装了此项需求,只需拿来即用就行。用法非常简单:
首先安装一下本 gem,gem install useragents
。
然后对代码:
require 'httparty'
HTTParty.get('http://ruby-china.org')
更改成这样即可
require 'useragents'
agent = UserAgents.rand() # 从 500 多个 User-Agent 中随机选出一个
# => "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36"
HTTParty.get('http://ruby-china.org', :headers => {'User-Agent' => agent})
useragents
全部收集于流行浏览器 Chrome, Opera, Safari, InternetExplorer, Firexof
,并剔除了其中的老旧版本,最终保留了 500 多个 User-Agent
,并会定时更新。
附上 github
地址 https://github.com/debbbbie/useragents-rb,欢迎 fork
或提交 issues
。
LZ 在明知
爬虫的发展,已经严重危害了目标网站的服务质量及数据安全
的情况下,却提供工具,这算不上一种助纣为虐? 我非常赞赏 LZ 的分享精神,但对此事的出发点持保留态度。
顶 3 楼 LZ 在明知爬虫的发展,已经严重危害了目标网站的服务质量及数据安全的情况下,提供工具这也算是一方面的助纣为虐了 对于蜘蛛,原本应该是体现的越明显越好,但是现在变成了东躲西藏,UA 也没有体现。现在不想让爬虫爬都不行了
爬虫的速度,一般都有啥办法提升?
还有一种情景,我有大量的 facebook 的 oauth token,需要抓取用户最新的 feed,我一分钟能拿多少个人的数据,有啥办法提高速度?多线程应该算一种吧,有没有其他好的思路?
嗯,不能爬得太频繁啊,否则封 ip 很容易。。。多搞些代理才是王道;或者直接把抓取和解析任务交给客户端 webkit 来干,server 只提供破解规则啥的