一周一技 | 如何快速拥有 600 + 个代理 IP?

一周一技 | 如何快速拥有 600 + 个代理 IP?

Tor 与免费代理


说到免费的代理,很多读者可以想到是一些免费的代理网站,这些网站的代理一般是通过扫描服务器的端口获得的,且可用性和安全性不高,最大的优点就是免费的。

而 Tor 同样具有这个特性,而且可用性和匿名性更强,不仅如此 Tor 的代理属于你一人独享,不会出现代理明明可用但是却无法绕过网站限制的情况。

至于 Tor 到底能提供多少个代理 IP ,昨晚测试了2 个小时,还没有测完。

爬虫使用 Tor 代理的优势在哪?

•Tor 代理每隔几分钟会切换一次出口IP,意味着每过几分钟就可以使用一个新的IP
•Tor 代理通过多层中间节点保证匿名性

Tor 的连接过程是怎么样的?

Tor 发明的初衷并不是用于爬虫,就像 Selenium 的初衷并不是用于自动化爬虫一样。

Tor 是一种“代理节点快速动态变化的加密三重代理”。

当需要通过 Tor 传递数据时,需要先连接到Directory服务获取可以用的节点。

一周一技 | 如何快速拥有 600 + 个代理 IP?

之后从可用的节点中随机取出几个节点,组成一条通向目的节点的通路。

一周一技 | 如何快速拥有 600 + 个代理 IP?

每隔一段时间,原有的通路会被拆除,随机新的节点组成新的通路用于通信。

一周一技 | 如何快速拥有 600 + 个代理 IP?

如何搭建一个可用的 Tor 代理


首先需要一台能够*浏览网络的服务器,这里使用的服务器是 Ubuntu 18.04.3

一周一技 | 如何快速拥有 600 + 个代理 IP?

接着需要安装 Tor 代理, 注意这里安装的不是 Tor Brower。

sudo apt-get install tor

接着需要生成密码

tor --hash-password mypassword

这里会生成一串以 16 开头的 hash 串。

一周一技 | 如何快速拥有 600 + 个代理 IP?

接着修改 Tor 的配置。

sudo vim /etc/tor/torrc

根据开头的介绍 Tor 在几分钟内会自动更换 IP 但是这个更换频率在爬虫应用中显然是不合适的,所以我们修改他的更换频率为 10 秒。

# 指定端口
ControlPort 9051
# 填入密码
HashedControlPassword [密码]
# 设置更换ip的频率
MaxCircuitDirtiness 10

接下来就是关于我们爬虫脚本的编写了。

这里提供了 Python 2 和 Python 3 两个版本。

Python 2

依赖包安装

pip install requesocks
pip install requests

测试脚本

import os
import requests
import requesocks
import time
url = 'https://api.ipify.org?format=json'
def getip_requests(url):
    print "(+) Sending request with plain requests..."
    r = requests.get(url)
    print "(+) IP is: " + r.text.replace("\n", "")
def getip_requesocks(url):
    print "(+) Sending request with requesocks..."
    session = requesocks.session()
    session.proxies = {'http': 'socks5://127.0.0.1:9050',
                       'https': 'socks5://127.0.0.1:9050'}
    r = session.get(url)
    print "(+) IP is: " + r.text.replace("\n", "")
def main():
    print "Running tests..."
    getip_requests(url)
    while True:
        getip_requesocks(url)
        time.sleep(10);
if __name__ == "__main__":
    main()

测试效果图

一周一技 | 如何快速拥有 600 + 个代理 IP?

这里第一个 IP 为主机 IP,之后的 IP 为随机分配的 IP

Python3

依赖包

pip3 install pysocks
pip3 install requests

测试脚本

import requests
import time
import sys
import socket
import socks

def getip_requests(url):
    print("(+) Sending request with plain requests...")
    r = requests.get(url)
    print("(+) IP is: " + r.text.replace("\n", ""))

def main():
    print("Running tests...")
    url = 'https://api.ipify.org?format=json'
    socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050)
    socket.socket = socks.socksocket
    while True:
        getip_requests(url)
        time.sleep(10);

if __name__ == '__main__':
    main()

测试效果图

一周一技 | 如何快速拥有 600 + 个代理 IP?

总结


上面巴拉巴拉讲了那么多,但是爬虫从业者都会有个疑问:

Tor 这么好,为什么在商业应用中极其少见?

这是因为 Tor 分派的 IP 延时并不能满足商业化爬虫的低时延,高并发的需求,所以 Tor 只能存在于业余选手的玩具库里。

不过在人人都要会点数据采集技能的今天,在工具库里常备一个有 600 + 免费 IP 的小工具也是蛮有意思的一件事情,不是吗?

上一篇:ORA-00600: 内部错误代码, 参数: [rwoirw: check ret val], [], [], [], [], [], [], [], [], [], [], []


下一篇:TensorFlow之keras.layers.Conv2D( )