获取各平台商品价格,批发价格
crawl_price/
├── config/ # 配置文件
│ ├── __init__.py
│ └── settings.py # 数据库、爬虫、日志配置
├── crawlers/ # 爬虫实现
│ ├── __init__.py
│ ├── base.py # 爬虫基类
│ ├── taobao.py # 淘宝爬虫
│ ├── jd.py # 京东爬虫
│ └── alibaba1688.py # 1688批发平台爬虫
├── models/ # 数据库模型
│ ├── __init__.py
│ └── product.py # 商品和价格历史模型
├── utils/ # 工具函数
│ ├── __init__.py
│ ├── db_utils.py # 数据库操作工具
│ └── helpers.py # 通用辅助函数
├── logs/ # 日志目录
├── main.py # 主程序入口
├── requirements.txt # 依赖文件
├── .env.example # 环境变量示例
└── .gitignore
pip install -r requirements.txt
复制 .env.example 为 .env 并修改配置:
cp .env.example .env
默认使用 SQLite 数据库,无需额外配置。数据库文件默认保存在 data/price_crawler.db。
# 数据库类型: sqlite (默认) 或 mysql
DB_TYPE=sqlite
# SQLite 配置
SQLITE_PATH=data/price_crawler.db
如果需要使用 MySQL 数据库,修改配置如下:
# 数据库类型: sqlite (默认) 或 mysql
DB_TYPE=mysql
# MySQL 配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=price_crawler
DB_USER=root
DB_PASSWORD=your_password
# 可选:代理配置
# HTTP_PROXY=http://127.0.0.1:7890
# HTTPS_PROXY=http://127.0.0.1:7890
无需手动创建数据库,运行初始化命令会自动创建:
python main.py --mode init
需要先创建数据库:
CREATE DATABASE price_crawler CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后运行初始化命令:
python main.py --mode init
python main.py --help
python main.py --mode init
# 爬取淘宝的"手机"商品
python main.py --mode crawl --platforms taobao --keywords 手机
# 爬取淘宝和京东的"手机"商品,各爬取2页
python main.py --mode crawl --platforms taobao jd --keywords 手机 --pages 2
# 爬取1688批发平台的"服装"商品
python main.py --mode crawl --platforms alibaba1688 --keywords 服装 --pages 3
# 多个关键词
python main.py --mode crawl --platforms taobao --keywords 手机 电脑 平板 --pages 1
# 使用3个线程并发爬取多个平台
python main.py --mode crawl --platforms taobao jd alibaba1688 --keywords 手机 --pages 2 --workers 3
由于淘宝、京东、1688等平台有较强的反爬机制,建议使用 Cookie 或代理:
# 使用 Cookie
python main.py --mode crawl --platforms taobao --keywords 手机 --cookie "your_cookie_here"
# 使用代理
python main.py --mode crawl --platforms taobao --keywords 手机 --proxy "http://127.0.0.1:7890"
# 同时使用 Cookie 和代理
python main.py --mode crawl --platforms taobao --keywords 手机 --cookie "your_cookie" --proxy "http://127.0.0.1:7890"
# 搜索所有平台的"手机"商品
python main.py --mode search --keyword 手机
# 搜索指定平台
python main.py --mode search --keyword 手机 --platform taobao
# 限制返回数量
python main.py --mode search --keyword 手机 --limit 20
python main.py --mode stats
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Integer | 主键 |
| product_id | String(100) | 平台商品ID |
| name | String(500) | 商品名称 |
| url | Text | 商品链接 |
| image_url | Text | 商品图片 |
| shop_name | String(200) | 店铺名称 |
| platform | String(50) | 平台: taobao/jd/alibaba1688 |
| is_wholesale | Integer | 是否批发: 0-否, 1-是 |
| min_order_quantity | Integer | 最小起订量(批发) |
| current_price | Float | 当前价格 |
| original_price | Float | 原价 |
| sales_volume | Integer | 销量 |
| create_time | DateTime | 创建时间 |
| update_time | DateTime | 更新时间 |
| crawl_time | DateTime | 爬取时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Integer | 主键 |
| product_id | String(100) | 商品ID |
| price | Float | 价格 |
| original_price | Float | 原价 |
| platform | String(50) | 平台 |
| price_type | String(50) | 价格类型: retail/wholesale |
| min_quantity | Integer | 最小起订量 |
| crawl_time | DateTime | 爬取时间 |
from crawlers.taobao import TaobaoCrawler
from crawlers.jd import JdCrawler
from crawlers.alibaba1688 import Alibaba1688Crawler
# 淘宝爬虫
with TaobaoCrawler(cookie='your_cookie', proxy='http://127.0.0.1:7890') as crawler:
products = crawler.search('手机', page=1)
for product in products:
print(f"{product['name']}: ¥{product['price']}")
# 1688批发爬虫
with Alibaba1688Crawler() as crawler:
products = crawler.search('服装', page=1)
for product in products:
print(f"{product['name']}")
print(f" 起订量: {product.get('min_order_quantity', 'N/A')}")
print(f" 价格区间: {product.get('price_ranges', [])}")
from main import run_crawl, init_database
# 初始化数据库
init_database()
# 并发爬取多个平台
results = run_crawl(
platforms=['taobao', 'jd', 'alibaba1688'],
keywords=['手机', '电脑'],
pages=2,
concurrent=True,
max_workers=3
)
print(f"淘宝: {len(results.get('taobao', []))} 个商品")
print(f"京东: {len(results.get('jd', []))} 个商品")
print(f"1688: {len(results.get('alibaba1688', []))} 个商品")
反爬机制:淘宝、京东、1688等平台有较强的反爬机制,建议:
Cookie 获取:登录对应平台后,从浏览器开发者工具中复制 Cookie。
频率控制:程序已内置随机延迟机制,但仍需注意爬取频率,避免被封禁。
数据更新:价格可能随时变动,建议定期重新爬取以获取最新价格。
MIT License