如果有业务需要采集国外被墙网站,通常需要走vpn或者ss,这里记录了如何使用ss进行目标网站采集的代码配置。一般来说我们是开启一个ss客户端,然后通过socks5
代理实现对如wiki、脸书、推特等网站数据抓取,在基于requests[socks]
库的代码如下:
proxy = {'http': 'socks5://127.0.0.1:1086', 'https': 'socks5://127.0.0.1:1086'}
request.get('http://www.google.com', proxies=proxy)
上述代码只是考虑了将采集程序运行在一台搭建了ss客户端的机器上,如果我们手里面有多个ss代理,我们如何充分利用这些代理呢?如果资源充足的情况下,我们可以单独分配一台机器用作代理服务器,然后在此机器上通过绑定不同端口的方式启动多个ss代理客户端,比如:
>>> sslocal -c config1.json
>>> sslocal -c config2.json
>>> ...
>>> sslocal -c confign.json
这个时候我们就可以通过将这些代理信息配置到程序的配置文件中,每次抓取的时候就随机的获取指定数量的代理就行了。但是如果我们的程序想要通过远程的方式来调用代理服务的时候,我们需要修改ss代理客户端的配置文件了,我们可以通过修改local_address
来达到监听其他机器调用的目的,配置如下:
{
"server":"your ss server ip",
"server_port" : 12345,
"local_address": "0.0.0.0",
"local_port": 1086,
"password":"pswd",
"timeout": 300,
"method": "aes-256-cfb"
}
这里我们的local_address
就不再是127.0.0.1
了,而是0.0.0.0
,即表示允许监听来自所有ip的请求。
假设我们的ss客户端代理服务器地址是192.168.20.1
,我们的程序可以这样写:
proxy = {'http': 'socks5://192.168.20.1:1086', 'https': 'socks5://192.168.20.1:1086'}
request.get('http://www.google.com', proxies=proxy)
这样就达到目的。但是本方法的配置有安全问题,最好是在内网中这样配置,不然会被端口扫描器扫描到,被其他人利用。
网友评论