andeya
pholcus
Go

Pholcus is a distributed high-concurrency crawler software written in pure golang

Last updated Jul 8, 2026
7.6k
Stars
1.7k
Forks
4
Issues
+1
Stars/day
Attention Score
91
Language breakdown
No language data available.
Files click to expand
README

Pholcus Logo

Pholcus(幽灵蛛)

纯 Go 语言编写的分布式高并发爬虫框架

GitHub release GitHub stars Go Reference Go Report Card License GitHub issues GitHub closed issues

快速开始核心特性架构设计操作界面规则编写FAQ


免责声明

本软件仅用于学术研究,使用者需遵守其所在地的相关法律法规,请勿用于非法用途!
>
如在中国大陆频频爆出爬虫开发者涉诉与违规的 新闻
>
郑重声明:因违法违规使用造成的一切后果,使用者自行承担!

核心特性

运行模式
  • 单机模式 — 开箱即用
  • 服务端模式 — 分发任务
  • 客户端模式 — 接收并执行任务
操作界面
  • Web UI — 跨平台,浏览器操作
  • GUI — Windows 原生界面
  • Cmd — 命令行批量调度
数据输出
  • MySQL / MongoDB
  • Kafka / Beanstalkd
  • CSV / Excel
  • 原文件下载
爬虫规则
  • 静态规则(Go)— 高性能,深度定制
  • 动态规则(JS/XML)— 热加载,无需编译
  • 30+ 内置示例规则
更多亮点:
  • 三引擎下载器 surfer:Surf(高并发 HTTP)/ PhantomJS / Chrome(Chromium 无头浏览器,自动执行 JS)
  • 智能 Cookie 管理:固定 UserAgent 自动保存 cookie,或随机 UserAgent 禁用 cookie
  • 模拟登录、自定义 Header、POST 表单提交
  • 代理 IP 池,可按频率自动更换
  • 随机停歇机制,模拟人工行为
  • 采集量与并发协程数可控
  • 请求自动去重 + 失败请求自动重试
  • 成功记录持久化,支持断点续爬
  • 分布式通信全双工 Socket 框架

架构设计

模块结构
模块结构
项目架构
项目架构
分布式架构
分布式架构

目录结构

pholcus/
 ├── app/                    核心逻辑
 │   ├── crawler/            爬虫引擎 & 并发池
 │   ├── downloader/         下载器(surfer)
 │   ├── pipeline/           数据管道 & 多种输出后端
 │   ├── scheduler/          请求调度器
 │   ├── spider/             爬虫规则引擎
 │   ├── distribute/         分布式 Master/Slave 通信
 │   └── aid/                辅助模块(历史记录、代理 IP)
 ├── config/                 配置管理
 ├── exec/                   启动入口 & 平台适配
 ├── cmd/                    命令行模式
 ├── gui/                    GUI 模式(Windows)
 ├── web/                    Web UI 模式
 ├── common/                 公共工具库(DB 驱动、编码、队列等)
 ├── logs/                   日志模块
 ├── runtime/                运行时缓存 & 状态
 └── sample/                 示例程序 & 30+ 爬虫规则

快速开始

环境要求

  • Go 1.18+(推荐 1.22+)

获取源码

git clone https://github.com/andeya/pholcus.git
 cd pholcus

编写入口

创建 main.go(或参考 sample/main.go):
package main
 
 import (
     "github.com/andeya/pholcus/exec"
      "github.com/andeya/pholcus/sample/staticrules"  // 内置规则库
     // _ "yourproject/rules"                            // 自定义规则库
 )
 
 func main() {
     // 启动界面:web / gui / cmd
     // 可通过 -a_ui 运行参数覆盖
     exec.DefaultRun("web")
 }

编译运行

# 编译(非 Windows 平台自动排除 GUI 包)
 go build -o pholcus ./sample/
 
 

查看所有可选参数

./pholcus -h
Windows 下隐藏 cmd 窗口的编译方式:
go build -ldflags="-H=windowsgui -linkmode=internal" -o pholcus.exe ./sample/

命令行参数一览

./pholcus -h
命令行帮助

操作界面

Web UI

启动后访问 http://localhost:2015,在浏览器中即可完成蜘蛛选择、参数配置、任务启停等全部操作。 Web 界面

GUI(仅 Windows)

原生桌面客户端,功能与 Web 版一致。 GUI 界面

Cmd 命令行

适用于服务器部署或 cron 定时任务场景。
pholcus -ui=cmd -amode=0 -cspider=3,8 -aouttype=csv -a_thread=20 \
     -abatchcap=5000 -apause=300 -a_proxyminute=0 \
     -akeyins="<pholcus><golang>" -alimit=10 -asuccess=true -afailure=true

规则编写

Pholcus 支持 静态规则(Go)动态规则(JS/XML) 两种方式。

静态规则(Go)

随软件一同编译,性能最优,适合重量级采集项目。在 sample/static_rules/ 下新建 Go 文件即可:
package rules
 
 import (
     "net/http"
     "github.com/andeya/pholcus/app/downloader/request"
     "github.com/andeya/pholcus/app/spider"
 )
 
 func init() {
     mySpider.Register()
 }
 
 var mySpider = &spider.Spider{
     Name:         "示例爬虫",
     Description:  "示例爬虫 [Auto Page] [http://example.com]",
     EnableCookie: true,
     RuleTree: &spider.RuleTree{
         Root: func(ctx *spider.Context) {
             ctx.AddQueue(&request.Request{
                 URL:  "http://example.com",
                 Rule: "首页",
             })
         },
         Trunk: map[string]*spider.Rule{
             "首页": {
                 ParseFunc: func(ctx *spider.Context) {
                     ctx.Output(map[int]interface{}{
                         0: ctx.GetText(),
                     })
                 },
             },
         },
     },
 }
更多示例见 sample/static_rules/,涵盖百度、京东、淘宝、知乎等 30+ 网站。

动态规则(JS/XML)

无需编译即可热加载,适合轻量级采集。将 .pholcus.xml 文件放入 dyn_rules/ 目录:
<Spider>
     <Name>百度搜索</Name>
     <Description>百度搜索 [Auto Page] [http://www.baidu.com]</Description>
     <Pausetime>300</Pausetime>
     <EnableLimit>false</EnableLimit>
     <EnableCookie>true</EnableCookie>
     <EnableKeyin>true</EnableKeyin>
     <NotDefaultField>false</NotDefaultField>
     <Namespace></Namespace>
     <SubNamespace></SubNamespace>
     <Root>
         
     </Root>
     <Rule name="搜索结果">
         <ParseFunc>
             
         </ParseFunc>
     </Rule>
 </Spider>
同时兼容 .pholcus.html 旧格式。
<pre><code class="lang-">### Chrome 引擎说明 Chrome 引擎依赖本机安装的 Chromium / Google Chrome 浏览器,通过 chromedp 驱动。 适用场景:
  • 目标网站有 JS 渲染的内容(SPA / CSR 页面)
  • 目标网站有安全验证(如百度安全验证)需要浏览器执行 JS 后自动跳转
  • 需要模拟真实浏览器环境绕过反爬检测
环境要求:
  • 本机需安装 Chrome / Chromium 浏览器
  • macOS: brew install --cask google-chromebrew install chromium
  • Linux: apt install chromium-browseryum install chromium
  • Windows: 安装 Google Chrome 即可
注意事项:
  • Chrome 引擎每次请求会启动独立的无头浏览器实例,资源消耗高于 Surf
  • 建议仅在 Surf 引擎无法获取内容时使用 Chrome
  • Chrome 引擎内置了反自动化检测(隐藏 navigator.webdriver、禁用自动化标志等)

配置说明

运行时目录</code></pre>

├── pholcus 可执行文件 ├── dyn_rules/ 动态规则目录(可在 config.ini 中配置) │ └── xxx.pholcus.xml 动态规则文件 └── pholcus_pkg/ 运行时文件目录 ├── config.ini 配置文件 ├── proxy.lib 代理 IP 列表 ├── phantomjs PhantomJS 程序 ├── text_out/ 文本输出目录 ├── file_out/ 文件输出目录 ├── logs/ 日志目录 ├── history/ 历史记录目录 └── cache/ 临时缓存目录 <pre><code class="lang-">### 代理 IP 在
pholcus_pkg/proxy.lib 文件中逐行写入代理地址:</code></pre> http://183.141.168.95:3128 https://60.13.146.92:8088 http://59.59.4.22:8090 ` 通过界面选择"代理 IP 更换频率"或命令行参数 -a_proxyminute 启用。 > 注意: macOS 下使用代理 IP 功能需要 root 权限,否则无法通过 ping 检测可用代理。

内置爬虫规则

| 分类 | 规则名称 | | -------- | --------------------------------------------------------- | | 搜索引擎 | 百度搜索、百度新闻、谷歌搜索、京东搜索、淘宝搜索 | | 电商平台 | 京东、淘宝、考拉海购、蜜芽宝贝、顺丰海淘、Holland&Barrett | | 新闻资讯 | 中国新闻网、网易新闻、人民网 | | 社交问答 | 知乎日报、知乎编辑推荐、悟空问答、微博粉丝 | | 房产汽车 | 房天下二手房、汽车之家 | | 数码科技 | ZOL 手机、ZOL 电脑、ZOL 平板、乐蛙 | | 分类信息 | 赶集公司、全国区号 | | 社交工具 | QQ 头像 | | 学术期刊 | IJGUC | | 其他 | 阿里巴巴、技版、文件下载测试 |

常见问题

<details> <summary><b>请求队列中重复的 URL 会自动去重吗?</b></summary> 默认自动去重。如需允许重复请求,设置
Request.Reloadable = true。 </details> <details> <summary><b>框架能否判断页面内容是否更新?</b></summary> 框架不内置页面变更检测,但可在规则中自定义实现。 </details> <details> <summary><b>请求成功的判定标准是什么?</b></summary> 以服务器是否返回响应流为准,而非 HTTP 状态码。即 404 页面也算"请求成功"。 </details> <details> <summary><b>请求失败后如何重试?</b></summary> 每个 URL 尝试下载指定次数后,若仍失败则进入 defer 队列。当前任务正常结束后自动重试。再次失败则保存至失败历史记录。下次执行同一规则时,可选择继承历史失败记录进行自动重试。 </details>

参与贡献

欢迎提交 Issue 和 Pull Request!
  • Fork 本仓库
  • 创建特性分支:git checkout -b feature/your-feature
  • 提交更改:git commit -m 'Add your feature'
  • 推送分支:git push origin feature/your-feature`
  • 提交 Pull Request

开源协议

本项目基于 Apache License 2.0 开源。
Created by andeya — 如果觉得有帮助,请给个 Star 支持!

🔗 More in this category

© 2026 GitRepoTrend · andeya/pholcus · Updated daily from GitHub