|
|
3 天之前 | |
|---|---|---|
| .. | ||
| area | 3 天之前 | |
| area_info | 3 天之前 | |
| commons | 3 天之前 | |
| oss_upload | 3 天之前 | |
| pipelines | 3 天之前 | |
| spiders | 3 天之前 | |
| .gitignore | 3 天之前 | |
| README.md | 3 天之前 | |
| requirements.txt | 3 天之前 | |
| snapshot_jd.py | 3 天之前 | |
| snapshot_taobao.py | 3 天之前 | |
| start_run_jd.py | 3 天之前 | |
| start_run_taobao.py | 3 天之前 | |
| start_run_yaofangwang.py | 3 天之前 | |
| 新建 文本文档.txt | 3 天之前 | |
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
cd spides
python start_run_taobao.py
h5api.m.taobao.com,无需浏览器渲染商品列表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 秒 |
cd spides
python start_run_jd.py
http://192.168.2.246:8080/api/collect_task/pullwhile 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 秒 |
cd spides
python start_run_yaofangwang.py
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 |
commons/scheduler.py)心跳 + 任务拉取的调度器基类,被三个平台入口共用。
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
commons/collect_schedule_runner.py)通用采集调度循环,封装"拉任务 → 跑爬虫 → 上报状态 → 飞书通知"的完整流程。
run_scheduled_loop("平台名", platform_id, SpiderClass)
pipelines/drug_pipelines.py)统一数据出口:商品信息入库(retrieve_scrape_data)+ 商品图片上传 OSS。
pip install DrissionPage curl_cffi lxml pymysql oss2 requests
drug_retrievespides/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)