为啥拨号 VPS 你值得拥有?
话说 IP 这个东西对于用 python 搞搞东西的人来说都是很有必要的(你懂得🤔),尝试过多种 IP 方案都觉得不是很好用。
- 免费代理:极度不稳定;
- 收费代理:速度非常慢;
- 本地拨号:切换时间长。
综上所述,在试用了拨号 VPS 之后以上烦恼全部没有了😁
使用拨号 VPS 后的架构变化
传统的 python 爬爬架构都是
应用程序 -> 代理服务器 -> 目标地址
使用拨号 VPS 后的爬爬架构变为
应用程序 -> 反向代理服务器 -> 拨号VPS代理服务器 -> 目标地址
这种架构的最大好处就是优雅,一切都是自动化的,而且可以根据需求随时调整。
这篇文章记录点什么呢?
要完成上述的架构需要的不止是一个环节的配置,而本文只记录拨号 VPS 服务器如何搭建,其它环节的配置有空的时候另文记录。
开始吧……
使用过的各种代理包括西刺代理、站大爷、无极网络、云立方等等,最后用的是云立方的拨号 VPS 服务器,原因大概就是界面还不错、客服挺好的、稳定性没记错的话挺好。
注册账号
注册个云立方账号,注册点这里。
买个服务器
由于只是拨号及代理使用,所以一般不需要非常高的性能,我买的 0.5G 100M 的配置,链接这里。
购买如下图:

配置服务器
1. 更新系统
# yum update -y
2. 安装必要软件
配置 python3.6 数据源
# yum install epel-release https://centos7.iuscommunity.org/ius-release.rpm -y
安装 vim squid httpd-tools python36 pip3
# yum install vim squid httpd-tools python36 python36u-pip -y
3. 配置 squid
配置开机启动
# systemctl enable squid
添加 squid 用户名密码验证
# touch /etc/squid/squid_passwd
# chown squid:squid /etc/squid/squid_passwd
# htpasswd /etc/squid/squid_passwd 你的用户名
修改 squid 配置文件
# vi /etc/squid/squid.conf
添加如下配置,大概在 55 行之前,具体作用请自行 Google。
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
如果需要高匿代理(其实是必须的),增加以下配置到配置文件。
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
request_header_access From deny all
如需修改端口请自行修改配置文件
配置自动拨号服务
1. 安装 python 依赖
# pip3.6 install requests-html
2. 创建 vps.py 文件
# vi ~/vps.py
vps.py 文件模板
# -*- coding: utf-8 -*-
import datetime
import os
import traceback
from requests_html import HTMLSession
"""
动态拨号 VPS 循环拨号汇报 IP
"""
def re_pppoe():
"""
重新拨号并返回 IP
:return: 新的外网 IP
:rtype: str
"""
os.system('/usr/sbin/pppoe-stop')
os.system('/usr/sbin/pppoe-start')
result = os.popen('/usr/sbin/pppoe-status')
ip = ''
for r in result:
if r.find('inet') != -1:
ip = r[r.find('inet') + 5:r.find('peer')].strip()
return ip
def send_ip(name, ip):
"""
向服务汇报 IP
:param name: 拨号 VPS 名称
:type name: str
:param ip: IP 信息
:type ip: str
:return:
"""
session = HTMLSession()
response = None
try_again = 5
while try_again > 0:
try:
response = session.post(
url='你的服务地址',
data={
'name': name,
'ip': ip
}
)
break
except Exception:
try_again -= 1
if try_again <= 0:
# 你的错误处理代码
pass
if response is not None:
response.close()
session.close()
def main():
"""
主方法,汇报空 IP 然后重新拨号并汇报新 IP。
:return:
"""
code = ''
for r in os.popen('cat ~/.bashrc'):
if r.find('PS1') != -1:
code = r[r.find('g')+1:r.find('g')+3]
my_name = f'vps{code}'
send_ip(my_name, '0.0.0.0')
ip = ''
while ip == '':
ip = re_pppoe()
send_ip(my_name, ip)
if __name__ == '__main__':
main()
3. 配置计划任务
每小时的第0分钟、第10分钟、第20分钟、第30分钟、第40分钟、第50分钟重新拨号并汇报 IP 信息。
# crontab -e
0,10,20,30,40,50 * * * * python3.6 ~/vps.py > /root/vps.log 2>&1 &
拨号相关命令
- 拨号
# pppoe-start
- 停止
# pppoe-stop
- 状态
# pppoe-stauts
还有点啥可以配置?
个人习惯于配置一下用户变量、vi配置、主机名,此节点可配可不配。
- 用户变量
vi ~/.bashrc
- vi 配置
vi /etc/vimrc
- 主机名
hostnamectl set-hostname 你的主机名
还差点啥?
- 一个接收拨号 VPS 外网 IP 的服务端;
- 本地 squid 反向代理配置;
- 一个使用拨号 VPS 爬爬架构的示例程序。
以上几项另文再记吧。
欢迎联系
有问题可以邮件联系。
备忘一下云立方链接
