最省钱的爬虫解决方案,比IP代理更划算


现状:

1、网上提供代理IP池的解决方案非常多,价格也有高有低,包天/月/年的都有,品质都要靠自己去尝试。

2、试过之后,发现成本相对高,每月要花200~300元, 所以希望研究一下是否有更性价比高的解决方案

 

分析思路:

1、网上介绍的ADSL拨号方案,需要到运营商处申请固网宽带,有点麻烦,成本能控制在100左右

2、手机数据卡无限流量方案,一般在40GB流量之后会限速,手机ip地址可以更新,从而走新的公网ip(NAT方案),价格在50左右(手机可以买二手的,200以内)

      2.1、运营商提供上网的方案一般是公网IP池共享,手机终端获得内网IP地址,运营商通过NAT方式,让手机最终能上外网;

      2.2、当手机终端更换IP地址后,将会重新从公网IP池拿一个ip做NAT,遇到同一个ip的可能性不算大; 

设计方案:

1、电脑上的爬取数据程序,走手机路由(华为手机开启USB共享网络)

2、电脑上的其他程序,走办公路由

3、当爬虫程序请求发现ip地址被封杀之后,通过adb shell命令,将手机的ip地址重置,参见博文:  python3 控制安卓手机的飞行模式遇到的问题汇总

python指定请求走指定ip出口,代码如下

#coding=utf-8
import requests,sys,socket
from requests_toolbelt.adapters import source


#本机有多个ip地址上网,走指定ip地址出口发起请求
s = requests.Session()
new_source = source.SourceAddressAdapter('192.168.124.20')
s.mount('http://', new_source)
s.mount('https://', new_source)
print(s.get('http://www.baidu.com/'))

其中有个模块(requests_toolbelt), 需要提前下载好

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests_toolbelt

 

手机启动usb共享网络后,电脑上会出现两条缺省路由,需要操作办公网口,打开tcp/ip协议,高级,编辑默认网关的跃点数为1,重新启用网卡后,跃点数显示为2,优先级已经很高,所有网络请求如果不特殊说明,都会走124网段出去

IPv4 路由表
==================================================
活动路由:
            网络目标        网络掩码          网关               接口      跃点数
          0.0.0.0          0.0.0.0   192.168.42.129    192.168.42.37     10
          0.0.0.0          0.0.0.0    192.168.124.1   192.168.124.20      2

  

 

遇到过的问题:

1、曾经在手机上用启动http代理的方式,由于程序写得比较粗糙,将手机的tcp资源耗光,导致必须重启手机才能恢复(TIME_WAIT 太多)

2、电脑上有多条路由时,担心办公使用的网络会走手机,导致流量承受不住,一下子耗光。想删掉缺省路由中走手机的那一块,结果windows支持不给力,老会出错

3、ADB命令时长会报错,没有好的办法治,除非把脚本挪到手机的python环境去实现

 

最终效果:

1、代理IP池的成本节省下来, 每月只需要30元的流量费,手机用二手的华为手机

2、网络速度稍慢于有线网络,多个网站可能导致封杀,切换ip地址频繁的情况(无法解决)

 

 2019-12-19 17:44:27 更新新方案

问题:usb经常在跑不到一天的情况下,和电脑失去连接。需要手动恢复,非常影响效率

新解决方案:拿掉usb线,走手机热点


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM