# 项目概述
本项目是一个分布式任务处理系统,专注于从网页中提取数据并进行 HTML 转换。它采用模块化设计,支持多机分布部署,确保任务的可追踪性和实时性。
## 技术栈
- **编程语言**: Python
- **任务调度**: Celery
- **数据存储**: SQLite
- **HTML 转换**: Pandoc, 自定义转换器
- **搜索引擎集成**: 浏览器驱动(基于 DrissionPage 和 ChromiumPage)
- **网络支持**: 解决 Cloudflare 人机验证 ; 自建代理池
## 功能特点
1. **分布式任务处理**:
- 使用 Celery 实现分布式任务调度。
- Worker 可在多台机器上部署,支持长时间运行的任务。
2. **HTML 转换**:
- 提供基础类 `ConverterBase`,用于处理 HTML 转换任务。
- 支持提取内容、修复链接、过滤 Markdown 、转换成 docx 等功能。
3. **谷歌搜索功能**:
- 使用自定义浏览器驱动(基于 `DrissionPage` 和 `ChromiumPage`)模拟浏览器行为。
- 支持动态代理配置和无头模式。
- 通过 XPath 定位搜索框并输入关键词。
- 处理分页逻辑,支持滚动加载和点击“下一页”按钮。
- 提取搜索结果的标题、URL 和内容,并存储到数据库中。
- 支持保存 HTML 页面以供后续分析。
4. **数据库交互**:
- 使用 SQLModel 与 SQLite 数据库交互,存储和检索搜索结果及转换结果。
5. **日志记录**:
- 使用自定义日志工具记录关键操作,便于排查问题。
## 项目结构
```
.
├── config/ # 配置文件
├── database/ # 数据库相关代码
├── tests/ # 测试代码
├── utils/ # 工具类和辅助函数
├── worker/ # 核心业务逻辑
│ ├── celery/ # Celery 任务定义
│ ├── html_convert/ # HTML 转换模块
│ └── search_engine/ # 浏览器驱动
└── readme.md # 项目说明文档
```
## 价值亮点
- **高内聚低耦合**: 模块间依赖关系清晰,易于扩展。
- **实时性与任务恢复**: 支持任务进度的实时监控和失败点恢复。
- **灵活的数据处理**: 支持多种数据源和转换方式,适应不同需求。
## 开始使用
1. 安装依赖:
```bash
poetry install
```
2. 启动 Celery Worker:
```bash
celery -A worker.celery.app worker --loglevel=info
```
3. 运行主程序:
```bash
python main.py
```
# pack
```shell
conda create -p venv python=3.12 -y
conda activate G:\code\upwork\zhang_crawl_bio\venv
poetry install --no-root
scrapling install
```
手动修改 venv\Lib\site-packages\crawl4ai\async_crawler_strategy.py 文件中修改如下代码:
```python
class BrowserManager:
def __init__(self, browser_config: BrowserConfig, logger=None):
...
if self.config.use_managed_browser:
self.managed_browser = ManagedBrowser(
...
cdp_url=self.config.cdp_url, # 👈 添加此行
)
```
```
```shell
# 如果 conda pack 无法打包的话,可能要安装: conda install --force-reinstall setuptools
conda pack -p .\venv -o crawl_env.tar.gz
Remove-Item -Path crawl_env -r
mkdir -p crawl_env
tar -xzf crawl_env.tar.gz -C crawl_env
Remove-Item -Path crawl_env.tar.gz
D:\Program\7-Zip\7z.exe a -tzip -mmt -mx3 google_crawler.zip *.bat config database crawl_env download mylib utils worker 使用说明.txt '-xr!*/pycache/*' '-xr!*__pycache__*' ui\fontend\dist ui\backend '-xr!ui\backend\output\*' '-xr!ui\backend\config.yaml'
# 使用 tar 压缩可能更快(其实也没多快),Windows11 以上都支持 tar.gz 格式
tar -czvf google_crawler.tar.gz *.bat config database crawl_env download mylib script tests utils worker 使用说明.txt --exclude='*/__pycache__'
# 测试用,排除指定文件,要加引号
D:\Program\7-Zip\7z.exe a -tzip -mmt -mx3 test.zip *.bat config ui\fontend\dist ui\backend\* -xr!ui\backend\output\* '-xr!ui\backend\config.yaml'
mkdir -p z7test
tar -xzf test.zip -C z7test
Remove-Item -Path z7test -r
Remove-Item -Path test.zip
```