最近写爬虫遇到比较严格的 IP 访问速率限制, 需要抓取的内容又比较多, 就打算找一个代理池.
网络上现有的免费的代理池可用 IP 都相对很少, 连接也不稳定. 收费的代理池价格又都比较高.
搜索的时候发现了一种新的代理 IP 来源 - 各类云函数服务, 可以获取较大量稳定低价的 IP.
原理
各类云函数服务都是基于容器服务和服务器集群为用户提供服务的, 用户上传的代码会被调度到有着不同公网 IP 的机器上运行. 且持续访问同一函数服务很有可能被分配到不同的公网 IP 地址.
若在本地搭建一个特殊的 HTTP 代理服务器, 爬虫使用该代理, 该代理得到 HTTP 请求后将其按一定格式打包后发送给云函数服务, 云函数解包并发出实际请求, 将请求结果返回本地的 HTTP 代理, 最终返回给爬虫. (即利用云函数转发.) 就可以实现和代理池相似的效果.
实践
GitHub 有相关基于腾讯云 SFC 的实现:
- https://github.com/hashsecteam/scf-proxy
- https://github.com/Sakurasan/scf-proxy (我用的这个.)
- https://github.com/shimmeris/SCFProxy
阿里云 FaaS 的 IP 数量暂未测试, 但腾讯云每个地区/每个时段都能得到 50 个以上的 IP. (可能随时间有波动.)
腾讯云国内地区有 4 个, 全部创建云函数之后轮询使用可以得到 200 个以上国内 IP, 足够很多爬虫使用了.
总计有 12 个地区, 如果国外 IP 也可以使用则可以得到更多 IP.
目前腾讯云免费额度前三个月可以每月 100 万请求, 之后每月也只需要 1 元就可以购买 100 万请求套餐包.
配置方法
基于 https://github.com/Sakurasan/scf-proxy
- git clone 上述项目.
- 运行
sh build.sh
, 得到需要上传到云服务的 main.zip go build
cmd 目录下的 client.go 得到客户端.
如果需要, 可以重复在不同地区部署并在本机运行多个客户端, 爬虫轮询访问.
以下部署步骤参考 https://freewechat.com/a/MzI0MDI5MTQ3OQ==/2247484068/1
打开 「函数服务」(https://console.cloud.tencent.com/scf/list?rid=1&ns=default) 点击「新建」
按照图中步骤填写,不要手欠直接点完成
点击完成后,自动上传 zip 包并布署,同时会创建 API 网关,直接点「立即访问」
获取云函数的 API 访问路径, 运行
./client -sfcurl <访问路径>
本文采用 CC BY-NC-SA 4.0 许可协议发布.
作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/sfc-proxy-pool/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬