OLIN 7264036484 最新 vor 3 Tagen
..
area 7264036484 最新 vor 3 Tagen
area_info 7264036484 最新 vor 3 Tagen
commons 7264036484 最新 vor 3 Tagen
oss_upload 7264036484 最新 vor 3 Tagen
pipelines 7264036484 最新 vor 3 Tagen
spiders 7264036484 最新 vor 3 Tagen
.gitignore 7264036484 最新 vor 3 Tagen
README.md 7264036484 最新 vor 3 Tagen
requirements.txt 7264036484 最新 vor 3 Tagen
snapshot_jd.py 7264036484 最新 vor 3 Tagen
snapshot_taobao.py 7264036484 最新 vor 3 Tagen
start_run_jd.py 7264036484 最新 vor 3 Tagen
start_run_taobao.py 7264036484 最新 vor 3 Tagen
start_run_yaofangwang.py 7264036484 最新 vor 3 Tagen
新建 文本文档.txt 7264036484 最新 vor 3 Tagen

README.md

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)

启动

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)

启动

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)

启动

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

心跳 + 任务拉取的调度器基类,被三个平台入口共用。

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

通用采集调度循环,封装"拉任务 → 跑爬虫 → 上报状态 → 飞书通知"的完整流程。

run_scheduled_loop("平台名", platform_id, SpiderClass)

DrugPipeline(pipelines/drug_pipelines.py

统一数据出口:商品信息入库(retrieve_scrape_data)+ 商品图片上传 OSS。


依赖

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.pyTB_DEVICE_ID = '17' 覆盖 config 导入
  • 药房网 start_run_yaofangwang.py 缺少 import time(但代码内用了 time.sleep