Forráskód Böngészése

上传文件至 'spides'

olin 3 hete
szülő
commit
330377b261
1 módosított fájl, 221 hozzáadás és 0 törlés
  1. 221 0
      spides/README.md

+ 221 - 0
spides/README.md

@@ -0,0 +1,221 @@
+# spides — 淘宝 / 京东 / 药房网爬虫
+
+PC 端浏览器自动化 + API 采集,覆盖三个电商平台。
+
+## 目录结构
+
+```
+spides/
+├── start_run_taobao.py              # 淘宝入口
+├── start_run_jd.py                  # 京东入口
+├── start_run_yaofangwang.py         # 药房网入口
+│
+├── spiders/
+│   ├── taobao/
+│   │   ├── taobao_crawl.py          # 淘宝 API 爬虫(mtop 接口)
+│   │   ├── taobao_login.py          # DrissionPage 登录 / Cookie 刷新
+│   │   ├── snapshot_taobao_crawl2.py# 快照模式 v2
+│   │   └── snapshot_taobao_login.py # 快照登录
+│   ├── jd/
+│   │   ├── jd_auto_crawl.py         # 京东浏览器爬虫
+│   │   ├── jd_auto_crawl_snap2.py   # 快照模式 v2
+│   │   └── jd_captcha.py            # 京东验证码处理
+│   └── yaofangwang/
+│       └── yaofangwang_crawl.py     # 药房网浏览器爬虫
+│
+├── commons/                          # 共用基础设施
+│   ├── scheduler.py                 # 爬虫调度器(心跳 + 任务拉取)
+│   ├── collect_schedule_runner.py   # 通用采集调度循环
+│   ├── conn_mysql.py                # MySQL 连接池
+│   ├── feishu_webhook.py            # 飞书通知
+│   ├── config.py                    # 设备 ID / 账号配置
+│   ├── Logger.py                    # 日志
+│   └── sql_data.py                  # SQL 辅助
+│
+├── pipelines/
+│   └── drug_pipelines.py            # 数据管道(入库 + OSS 上传)
+├── oss_upload/
+│   └── oss_upload.py                # 阿里云 OSS 图片上传
+└── area_info/
+    ├── city_name_to_id.py           # 城市名称 → ID 映射
+    └── city_name_to_id_2.py
+```
+
+---
+
+## 1. 淘宝(platform=1)
+
+### 启动
+
+```bash
+cd spides
+python start_run_taobao.py
+```
+
+### 技术方案
+
+- **API 采集**:调用淘宝 mtop 接口 `h5api.m.taobao.com`,无需浏览器渲染商品列表
+- **登录**:DrissionPage 浏览器自动化获取 Cookie,Cookie 有效期 3600 秒
+- **请求库**:`curl_cffi`(模拟 Chrome TLS 指纹防反爬)
+
+### 运行流程
+
+```
+while True:
+    1. CrawlerScheduler.start() → 启动后台心跳线程
+    2. 从调度 API 拉取任务(药品关键词 + 品牌 + 规格)
+    3. TaobaoCrawl(task).run():
+       a. 检查/刷新 Cookie
+       b. 搜索页 API 请求(翻页最多 20 页)
+       c. 每页获取商品列表,递归提取产品名称
+       d. DrugPipeline 入库 + OSS 上传商品图
+    4. 飞书通知采集结果
+    5. 休眠 20~30 分钟
+```
+
+### 关键配置
+
+| 项 | 值 |
+|----|-----|
+| 平台 ID | 1 |
+| mtop AppKey | 12574478 |
+| 最大翻页 | 20 |
+| Cookie 有效期 | 3600 秒 |
+| 重试次数 | 3 |
+| 调度间隔 | 1200~1800 秒 |
+
+
+---
+
+## 2. 京东(platform=2)
+
+### 启动
+
+```bash
+cd spides
+python start_run_jd.py
+```
+
+### 技术方案
+
+- **DrissionPage 浏览器自动化**:操控 Chrome 搜索 → 翻页 → 提取商品
+- **任务来源**:调度 API `http://192.168.2.246:8080/api/collect_task/pull`
+- **翻页方式**:JS 检测"下一页"按钮是否在视口内,自动点击
+
+### 运行流程
+
+```
+while True:
+    1. CrawlerScheduler.start() → 后台心跳
+    2. API 拉取最新任务
+    3. JdCrawlerV2(task).run():
+       a. 浏览器打开京东 → 搜索关键词
+       b. 逐页翻页,每页提取商品列表
+       c. 支持省份切换(area_info 城市映射)
+       d. DrugPipeline 入库 + OSS 上传
+    4. spider_schedule.stop()
+    5. 休眠 60 秒
+```
+
+### 关键配置
+
+| 项 | 值 |
+|----|-----|
+| 平台 ID | 2 |
+| 浏览器路径 | `C:\Program Files\Google\Chrome\Application\chrome.exe` |
+| 采集超时 | 5s(首屏)/ 6s(滚动) |
+| 调度间隔 | 60 秒 |
+
+### 注意
+
+- 需要 Chrome 浏览器和 DrissionPage
+
+---
+
+## 3. 药房网(platform=11)
+
+### 启动
+
+```bash
+cd spides
+python start_run_yaofangwang.py
+```
+
+### 技术方案
+
+- **DrissionPage 浏览器自动化**:直接打开 yaofangwang.com 搜索
+- **任务来源**:代码内置固定任务列表(TASK_LIST),也可通过 CrawlerScheduler 拉取
+
+### 运行流程
+
+```
+while True:
+    1. CrawlerScheduler.start() → 后台心跳
+    2. get_task() 拉取任务(或 TASK_LIST 兜底)
+    3. YaofangwangCrawl(task).run():
+       a. 浏览器打开药房网,搜索药品
+       b. 翻页提取商品详情(最多 100 页)
+       c. 解析价格、标题、规格
+       d. DrugPipeline 入库 + OSS 上传
+    4. spider_schedule.stop()
+    5. 休眠 30 秒
+```
+
+### 关键配置
+
+| 项 | 值 |
+|----|-----|
+| 平台 ID | 11 |
+| 最大翻页 | 100 |
+| 页间等待 | 2~4 秒 |
+| 域名 | yaofangwang.com |
+
+---
+
+## 共用基础设施
+
+### CrawlerScheduler(`commons/scheduler.py`)
+
+心跳 + 任务拉取的调度器基类,被三个平台入口共用。
+
+```python
+scheduler = CrawlerScheduler(device_id, platform_id)
+scheduler.start()            # 启动后台心跳线程(默认 30s 间隔)
+task = scheduler.get_task()  # 拉取待执行任务
+scheduler.stop()             # 停止心跳
+```
+
+**心跳地址:** `http://pricesys.kailin.com.cn:8083/api/collect_task/heartbeat`
+
+### CollectScheduleRunner(`commons/collect_schedule_runner.py`)
+
+通用采集调度循环,封装"拉任务 → 跑爬虫 → 上报状态 → 飞书通知"的完整流程。
+
+```python
+run_scheduled_loop("平台名", platform_id, SpiderClass)
+```
+
+### DrugPipeline(`pipelines/drug_pipelines.py`)
+
+统一数据出口:商品信息入库(`retrieve_scrape_data`)+ 商品图片上传 OSS。
+
+---
+
+## 依赖
+
+```bash
+pip install DrissionPage curl_cffi lxml pymysql oss2 requests
+```
+
+- Chrome 浏览器(淘宝仅需登录时,京东和药房网全程需要)
+- MySQL 数据库 `drug_retrieve`
+- 阿里云 OSS
+
+---
+
+## 注意事项
+
+- `spides/commons/config.py` 含药师帮/壹药城明文密码,不要提交公开仓库
+- 京东 `start_run_jd.py` 有两个 `get_task()` 定义,第二个覆盖第一个
+- 淘宝 `start_run_taobao.py` 内 `TB_DEVICE_ID = '17'` 覆盖 config 导入
+- 药房网 `start_run_yaofangwang.py` 缺少 `import time`(但代码内用了 `time.sleep`)