Cloudflare Workers proxy IP pool client with browser support
Project description
CFspider
基于 Cloudflare Workers 的代理 IP 池,使用 Cloudflare 全球边缘节点 IP 作为代理出口。
特性
- 使用 Cloudflare 全球 300+ 边缘节点 IP
- 与 requests 库语法一致,无学习成本
- 支持 GET、POST、PUT、DELETE 等所有 HTTP 方法
- 支持 Session 会话管理
- 返回 Cloudflare 节点信息(cf_colo、cf_ray)
- 支持浏览器模式,可渲染 JavaScript 动态页面、截图、自动化操作
- 完全免费,Workers 免费版每日 100,000 请求
部署 Workers
- 登录 Cloudflare Dashboard
- 进入 Workers & Pages
- 点击 Create application → Create Worker
- 将
workers.js代码粘贴到编辑器中 - 点击 Deploy
部署完成后,你将获得一个 Workers 地址,如 https://xxx.username.workers.dev
如需自定义域名,可在 Worker → Settings → Triggers → Custom Domain 中添加。
安装
方式一:PyPI 安装(推荐)
pip install cfspider
注意:Python 3.11+ 在 Debian/Ubuntu 上可能提示
externally-managed-environment错误,请使用以下任一方式解决:# 方式 A:使用虚拟环境(推荐) python3 -m venv venv source venv/bin/activate pip install cfspider # 方式 B:使用 pipx pipx install cfspider # 方式 C:强制安装(不推荐) pip install cfspider --break-system-packages
方式二:国内镜像源安装
如果 PyPI 访问较慢,可使用国内镜像:
# 清华源
pip install cfspider -i https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里云源
pip install cfspider -i https://mirrors.aliyun.com/pypi/simple
# 中科大源
pip install cfspider -i https://pypi.mirrors.ustc.edu.cn/simple
方式三:从 GitHub 安装
pip install git+https://github.com/violettoolssite/CFspider.git
方式四:手动安装
从官网下载 cfspider.zip 后解压:
# 下载地址:https://spider.violetteam.cloud/cfspider.zip
unzip cfspider.zip
pip install ./cfspider
快速开始
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.get("https://httpbin.org/ip", cf_proxies=cf_proxies)
print(response.text)
API 参考
请求方法
CFspider 支持以下 HTTP 方法,语法与 requests 库一致:
import cfspider
cf_proxies = "https://your-workers.dev"
cfspider.get(url, cf_proxies=cf_proxies)
cfspider.post(url, cf_proxies=cf_proxies, json=data)
cfspider.put(url, cf_proxies=cf_proxies, data=data)
cfspider.delete(url, cf_proxies=cf_proxies)
cfspider.head(url, cf_proxies=cf_proxies)
cfspider.options(url, cf_proxies=cf_proxies)
cfspider.patch(url, cf_proxies=cf_proxies, json=data)
请求参数
| 参数 | 类型 | 说明 |
|---|---|---|
| url | str | 目标 URL |
| cf_proxies | str | Workers 地址(必填) |
| params | dict | URL 查询参数 |
| data | dict/str | 表单数据 |
| json | dict | JSON 数据 |
| headers | dict | 请求头 |
| cookies | dict | Cookies |
| timeout | int/float | 超时时间(秒) |
响应对象
| 属性 | 类型 | 说明 |
|---|---|---|
| text | str | 响应文本 |
| content | bytes | 响应字节 |
| json() | dict | 解析 JSON |
| status_code | int | HTTP 状态码 |
| headers | dict | 响应头 |
| cf_colo | str | Cloudflare 节点代码(如 NRT) |
| cf_ray | str | Cloudflare Ray ID |
使用示例
GET 请求
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.get(
"https://httpbin.org/get",
cf_proxies=cf_proxies,
params={"key": "value"}
)
print(response.status_code)
print(response.json())
POST 请求
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.post(
"https://httpbin.org/post",
cf_proxies=cf_proxies,
json={"name": "cfspider", "version": "1.0"}
)
print(response.json())
使用 Session
Session 可以复用 Workers 地址,无需每次请求都指定:
import cfspider
cf_proxies = "https://your-workers.dev"
session = cfspider.Session(cf_proxies=cf_proxies)
r1 = session.get("https://httpbin.org/ip")
r2 = session.post("https://httpbin.org/post", json={"test": 1})
r3 = session.get("https://example.com")
print(r1.text)
print(r2.json())
session.close()
获取 Cloudflare 节点信息
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.get("https://httpbin.org/ip", cf_proxies=cf_proxies)
print(f"出口 IP: {response.json()['origin']}")
print(f"节点代码: {response.cf_colo}")
print(f"Ray ID: {response.cf_ray}")
自定义请求头
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.get(
"https://httpbin.org/headers",
cf_proxies=cf_proxies,
headers={
"User-Agent": "MyApp/1.0",
"Accept-Language": "zh-CN"
}
)
print(response.json())
设置超时
import cfspider
cf_proxies = "https://your-workers.dev"
response = cfspider.get(
"https://httpbin.org/delay/5",
cf_proxies=cf_proxies,
timeout=10
)
错误处理
import cfspider
cf_proxies = "https://your-workers.dev"
try:
response = cfspider.get("https://httpbin.org/ip", cf_proxies=cf_proxies)
response.raise_for_status()
print(response.text)
except cfspider.CFSpiderError as e:
print(f"请求失败: {e}")
except Exception as e:
print(f"其他错误: {e}")
浏览器模式
CFspider 支持浏览器模式,可以渲染 JavaScript 动态页面、截图、生成 PDF、自动化操作等。
安装浏览器
首先安装浏览器功能依赖和 Chromium:
# 安装带浏览器支持的 cfspider
pip install cfspider[browser]
# 安装 Chromium 浏览器
cfspider install
或者使用 Python 代码安装:
import cfspider
cfspider.install_browser()
获取渲染后的 HTML
import cfspider
browser = cfspider.Browser(cf_proxies="https://your-workers.dev")
# 获取 JavaScript 渲染后的完整 HTML
html = browser.html("https://example.com")
print(html)
browser.close()
页面截图
import cfspider
browser = cfspider.Browser(cf_proxies="https://your-workers.dev")
# 截图并保存
browser.screenshot("https://example.com", "screenshot.png")
# 截取整个页面
browser.screenshot("https://example.com", "full.png", full_page=True)
browser.close()
生成 PDF
import cfspider
browser = cfspider.Browser(cf_proxies="https://your-workers.dev")
# 生成 PDF(仅无头模式可用)
browser.pdf("https://example.com", "page.pdf")
browser.close()
自动化操作
import cfspider
browser = cfspider.Browser(cf_proxies="https://your-workers.dev")
# 打开页面,返回 Playwright Page 对象
page = browser.get("https://example.com")
# 点击元素
page.click("button#submit")
# 填写表单
page.fill("input#username", "myname")
page.fill("input#password", "mypassword")
# 等待元素
page.wait_for_selector(".result")
# 获取文本
text = page.inner_text(".result")
print(text)
browser.close()
执行 JavaScript
import cfspider
browser = cfspider.Browser(cf_proxies="https://your-workers.dev")
# 在页面中执行 JavaScript
result = browser.execute_script("https://example.com", "return document.title")
print(result)
browser.close()
使用 with 语句
import cfspider
with cfspider.Browser(cf_proxies="https://your-workers.dev") as browser:
html = browser.html("https://example.com")
print(html)
# 自动关闭浏览器
非无头模式
import cfspider
# headless=False 可以看到浏览器窗口
browser = cfspider.Browser(
cf_proxies="https://your-workers.dev",
headless=False
)
page = browser.get("https://example.com")
# 可以看到浏览器操作
browser.close()
注意事项
- Workers 免费版限制:每日 100,000 请求,单次 CPU 时间 10ms
- 请求体大小限制:免费版 100MB,付费版无限制
- 超时限制:免费版 30 秒,付费版无限制
- 不支持 WebSocket、gRPC 等非 HTTP 协议
- 浏览器模式需要额外安装
playwright和 Chromium
License
MIT License
链接
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cfspider-1.1.0.tar.gz.
File metadata
- Download URL: cfspider-1.1.0.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
229016cf2f8e634f64ffb4a617882cc583e0b912ac76349f365a9705b022a0fc
|
|
| MD5 |
e76921ea606be33838f74c24cc6e1fcb
|
|
| BLAKE2b-256 |
76a1ead70f62900467df7647d1ea16226eeffdee725e05373b5d31e0f44e2477
|
File details
Details for the file cfspider-1.1.0-py3-none-any.whl.
File metadata
- Download URL: cfspider-1.1.0-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
917e19bb0cc843f43f472a1471ff63998244f95c51b5bbc07ff4b90a0f0c2dfa
|
|
| MD5 |
b21ff45276534b0f28af0a7334b846bb
|
|
| BLAKE2b-256 |
c0c4f1d9f0c9069c62d4682ad30675c243746c1f89b7f97ded56035d74e5a2ad
|