現狀:
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線,走手機熱點

