Gem 爬虫福利 rest-tor

Ddl1st · 2017年12月17日 · 最后由 dizhu 回复于 2017年12月22日 · 4648 次阅读

https://github.com/plusor/rest-tor

rest-tor 是一个基于 tor 的代理服务 它可以无限制的变更 IP 去请求目标服务器

目前只是测试版本,等有时间再优化

rest-tor 依赖于第三方 gem

  • activesupport
  • nokogiri
  • redis-objects
  • rest-client
  • socksify

依赖的第三方包有

  • tor

安装第三方包

  • Mac OS: brew isntall tor
  • Ubuntu: apt-get install tor

USEAGE

Tor.request

Tor.request 类似于 RestClient::Request.execute, 接受的参数有:

  • method | 默认 get
  • url
  • payload
  • headerheaders (默认的 User-Agent 会使用常量 Tor::USER_AGENT)
  • mobile | 默认为 false, 如果为 true, 则使用移动端的 User-Agent
  • proxy 默认使用 tor 代理,如果为 false 则不使用代理。可以自定义代理如:proxy: 'http://127.0.0.1:8888'
  • raw 默认为 true, 结果等同于 Nokogiri::HTML(req.body), 如果为 false, 则返回 req.body
  • format | html, json, string 如果没有指定format则根据 raw 的值 true : html, false : string. 处理结果为对应的格式
  • mode | 默认为 :default, 根据每个 tor实例请求成功 (RestClient 请求没报错的情况下) 的数量排序,选择成功数最高的那个实例。可选 :order, 根据端口号进行排序。

可以自定义mode

Tor::Dispatcher.register :custom do
  Tor.store.all.sort_by do |(port, tor)|
    tor.c_success
  end
end

Tor.request(url: '...', mode: :custom)

在调用Tor.request时,会占用 tor 实例,如果是多线程并发执行,且没有多余的 tor 实例可用,系统则会自动初始化一个新的实例。

Tor.init 会自动初始化 10tor 实例.

  • Tor.stop(port) 关闭 tor
  • Tor.clear 关闭所有 tor
  • Tor.store.all 查看所有 tor

当 tor 实例失败次数到一定数量后,会自动重启 tor 实例,https://github.com/plusor/rest-tor/blob/master/lib/rest_tor/strategy/restart.rb

TODO

  • 添加测试
  • 代码优化
  • 添加配置项
  • 可自定义重启策略
  • 集成 Mechanize

最后欢迎拍砖和贡献代码

👍 实话第一次知道 Tor 这神器

大学爬 Google Scholar 时想了很多方案,最后就是用 Tor。SocksPort 配置一百多个端口,每次爬虫请求前都切换一个 ip,爬的很爽,不用自己去爬代理 ip。

2.4.1 :001 > Tor.request(url: 'http://ip.plusor.cn/', raw: false)
[2017-12-20 12:41:33.445] [72734-70134014417020] Open tor with port:9001
[2017-12-20 12:41:38.479] [72734-70134014417020] Testing tor 9001
[2017-12-20 12:42:38.490] [72734-70134014417020] Stop tor port:9001
[2017-12-20 12:42:38.491] [72734-70134014417020] RestClient::Exceptions::OpenTimeout:Timed out connecting to server
[2017-12-20 12:42:38.491] [72734-70134014417020] Open tor with port:9001
[2017-12-20 12:42:43.527] [72734-70134014417020] Testing tor 9001

一直没法连上这个怎么办?

可以 ping ip.plusor.cn

lithium4010 回复

有的时候 Tor 也会连不上,重试几次。也可以先初始化几个 Tor Tor.init

有的时候在国内连接 Tor 会有些超时。

我有的时候会在本地开 VPN 连接 Tor 😄

Ddl1st 回复
ping ip.plusor.cn
PING ip.plusor.cn (106.184.5.191): 56 data bytes
64 bytes from 106.184.5.191: icmp_seq=0 ttl=47 time=107.698 ms
64 bytes from 106.184.5.191: icmp_seq=1 ttl=47 time=93.106 ms
64 bytes from 106.184.5.191: icmp_seq=2 ttl=47 time=95.138 ms
64 bytes from 106.184.5.191: icmp_seq=3 ttl=47 time=92.840 ms

Tor.init 一直是失败的

lithium4010 回复

那就是你本地网络有问题了,国内使用 Tor 服务有点不稳定。我本地开了 VPN 可以连接 😅

买个动态代理很便宜啊 Tor 速度慢的不行

hooopo 回复

哈哈,其实速度也不是太慢

hooopo 回复

有好的动态 IP 购买渠道吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号