代理池新思路 - 基于腾讯云函数服务 SFC 的代理池

 

最近写爬虫遇到比较严格的 IP 访问速率限制, 需要抓取的内容又比较多, 就打算找一个代理池.

网络上现有的免费的代理池可用 IP 都相对很少, 连接也不稳定. 收费的代理池价格又都比较高.

搜索的时候发现了一种新的代理 IP 来源 - 各类云函数服务, 可以获取较大量稳定低价的 IP.

原理

各类云函数服务都是基于容器服务和服务器集群为用户提供服务的, 用户上传的代码会被调度到有着不同公网 IP 的机器上运行. 且持续访问同一函数服务很有可能被分配到不同的公网 IP 地址.

若在本地搭建一个特殊的 HTTP 代理服务器, 爬虫使用该代理, 该代理得到 HTTP 请求后将其按一定格式打包后发送给云函数服务, 云函数解包并发出实际请求, 将请求结果返回本地的 HTTP 代理, 最终返回给爬虫. (即利用云函数转发.) 就可以实现和代理池相似的效果.

实践

GitHub 有相关基于腾讯云 SFC 的实现:

阿里云 FaaS 的 IP 数量暂未测试, 但腾讯云每个地区/每个时段都能得到 50 个以上的 IP. (可能随时间有波动.)

腾讯云国内地区有 4 个, 全部创建云函数之后轮询使用可以得到 200 个以上国内 IP, 足够很多爬虫使用了.

总计有 12 个地区, 如果国外 IP 也可以使用则可以得到更多 IP.

目前腾讯云免费额度前三个月可以每月 100 万请求, 之后每月也只需要 1 元就可以购买 100 万请求套餐包.

配置方法

基于 https://github.com/Sakurasan/scf-proxy

  1. git clone 上述项目.
  2. 运行 sh build.sh, 得到需要上传到云服务的 main.zip
  3. go build cmd 目录下的 client.go 得到客户端.

如果需要, 可以重复在不同地区部署并在本机运行多个客户端, 爬虫轮询访问.

以下部署步骤参考 https://freewechat.com/a/MzI0MDI5MTQ3OQ==/2247484068/1

  1. 打开 「函数服务」(https://console.cloud.tencent.com/scf/list?rid=1&ns=default) 点击「新建」

  2. 按照图中步骤填写,不要手欠直接点完成

    截图截图

    截图截图

    截图截图

  3. 点击完成后,自动上传 zip 包并布署,同时会创建 API 网关,直接点「立即访问

  4. 获取云函数的 API 访问路径, 运行 ./client -sfcurl <访问路径>

本文采用 CC BY-NC-SA 4.0 许可协议发布.

作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/sfc-proxy-pool/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬