一个Tor代理绕过访问限制的典型案例
Page content
在编写爬虫测试初期,我们一般会验证目标站点是否存在若干的访问限制防护措施。例如UA防护、访问频率限制、人机验证等。而些许站点虽然存在这样的防护,但也可以通过代理绕过。
图片验证
而当我们在遇到图片验证的时候,有以下几种选择。
- 云市场的识别API (金钱成本)
- 打码平台 (金钱成本)
- 自己训练样本识别 (时间成本,算法知识储备)
- 放弃..
滑动验证
再者当出现滑动验证的时候,那可就比较够呛,我暂时知道以下几种。
- 模拟js滑动(高失败率)
- 训练真人滑动轨迹 (时间成本,算法知识储备)
- 转写逻辑+训练轨迹 (时间成本,js调试能力,算法知识储备,耐心)
- 再次放弃..
如果上述括号内的都具备了。那下文您啊就不用看啦
———–这是一条不起眼的大佬分割线———–
前段时间为了爬取关于虚拟货币方面的及时咨询就遇到这么个站点
通过使用调试工具我们可以看到。目标数据存在于中
常规爬虫都会以轮询的方式对目标页进行爬取并应用相同的规则,在不同的时间节点取到不同的数据,而这个站,在刷了一段时间后,出现了这个么东西
一个你不得不过的滑动验证..
这个时候我们将url丢入tor浏览器中发现,站点的滑动验证已经消失。
这里我要提一下,此结果只是说明这个站点可以通过ip代理来绕过,使用tor仅仅是为了高效而又0成本造福群众。
tor网络就像下面这幅图一样杂乱
常规单条线路由 入口节点 -> 中转节点1 -> 中转接点2 -> 出口节点
组成,当然这个有点离题了。。抱歉没控制住。
也就是说,互联网上存在多少个tor节点,你就能有多少个代理!
此时我们可以通过借助在程序上部署tor代理来实现,
Tor端口说明
9150
9050
socks5网络代理端口9151
9051
tor控制端口
部署说明
- 图形化操作系统
- 下载安装Tor浏览器启动即可 并通过netstat查看端口是否开启,具体命令不再赘述
- 服务器 (这里以ubuntu为例)
sudo apt-get install tor -y
sudo vi /etc/tor/torrc
将ControlPort
前#
去掉后保存sudo /etc/init.d/tor restart
重启tor服务netstat -anot
查看是否开始监听9x51端口
脚本控制切换线路模块
这里写一个简单的demo用来定时切换线路
- stem tor控制模块
import logging
import time
import requests
from pyquery import PyQuery as jq
from stem import Signal
from stem.control import Controller
logging.basicConfig(format= "[%(asctime)s] >>> %(levelname)s %(name)s: %(message)s",level=logging.INFO)
loger = logging.getLogger("Torctl")
controller = Controller.from_port(port=9151)
controller.authenticate()
def main():
while True:
time.sleep(2)
loger.info('NewID')
checkIP()
controller.signal(Signal.NEWNYM)
def checkIP():
try:
resp = requests.get('https://ipinfo.info/html/my_ip_address.php', proxies={
'https': 'socks5://127.0.0.1:9150'
})
loger.info(jq(resp.text)("#Text10 > p > span > b").text())
except Exception as e:
loger.error(e)
if __name__ == '__main__':
main()
这样就完成了一个自动tor切换的脚本,你的代理已经在全世界飞了,当然实际根据被Ban时切换。