8f6f14da
tangwang
test data prepare:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
|
# Amazon商品数据爬虫使用说明
## 概述
这是一个使用万邦API爬取亚马逊商品数据的Python脚本。脚本会读取查询列表文件,逐个请求API,并将结果保存为JSON文件。
## 文件说明
- `amazon_crawler.py` - 基础版爬虫脚本
- `amazon_crawler_v2.py` - 增强版爬虫脚本(推荐使用)
- `config.example.py` - 配置文件示例
- `queries.txt` - 搜索关键词列表(每行一个)
- `amazon_results/` - 结果保存目录(自动创建)
- `amazon_crawler.log` - 运行日志文件
## 快速开始
### 1. 安装依赖
```bash
pip install requests
```
### 2. 配置API密钥
有三种方式配置API密钥:
#### 方式1:使用配置文件(推荐)
```bash
cd data_crawling
cp config.example.py config.py
# 编辑 config.py,填入真实的API密钥
```
#### 方式2:使用命令行参数
```bash
python amazon_crawler_v2.py --key YOUR_KEY --secret YOUR_SECRET
```
#### 方式3:使用环境变量
```bash
export ONEBOUND_API_KEY="your_key_here"
export ONEBOUND_API_SECRET="your_secret_here"
python amazon_crawler_v2.py
```
### 3. 运行爬虫
#### 基础版运行
```bash
# 编辑 amazon_crawler.py,填入API密钥
python amazon_crawler.py
```
#### 增强版运行
```bash
# 使用默认配置
python amazon_crawler_v2.py
# 自定义参数
python amazon_crawler_v2.py \
--key YOUR_KEY \
--secret YOUR_SECRET \
--queries queries.txt \
--delay 2.0 \
--start 0 \
--max 100 \
--output amazon_results
```
## 命令行参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `--key` | API Key | 从配置文件或环境变量读取 |
| `--secret` | API Secret | 从配置文件或环境变量读取 |
| `--queries` | 查询文件路径 | `data_crawling/queries.txt` |
| `--delay` | 请求间隔(秒) | 2.0 |
| `--start` | 起始索引(断点续爬) | 0 |
| `--max` | 最大爬取数量 | None(全部) |
| `--output` | 结果保存目录 | `data_crawling/amazon_results` |
## 使用示例
### 示例1:测试前10个查询
```bash
python amazon_crawler_v2.py --max 10
```
### 示例2:从第100个查询开始继续爬取
```bash
python amazon_crawler_v2.py --start 100
```
### 示例3:加快爬取速度(减少延迟)
```bash
python amazon_crawler_v2.py --delay 1.0
```
### 示例4:使用自定义查询文件
```bash
python amazon_crawler_v2.py --queries my_queries.txt
```
### 示例5:完整参数示例
```bash
python amazon_crawler_v2.py \
--key "your_api_key" \
--secret "your_api_secret" \
--queries queries.txt \
--delay 2.0 \
--start 0 \
--max 100 \
--output my_results
```
## API参数说明
根据万邦API文档,支持以下搜索参数:
| 参数 | 说明 | 示例 |
|------|------|------|
| `q` | 搜索关键字 | "Mobile Phone Holder" |
| `start_price` | 开始价格 | 10 |
| `end_price` | 结束价格 | 100 |
| `page` | 页码 | 1 |
| `cat` | 分类ID | - |
| `discount_only` | 仅折扣商品 | yes/no |
| `sort` | 排序方式 | - |
| `page_size` | 每页数量 | 100 |
| `cache` | 使用缓存 | yes/no |
| `result_type` | 返回格式 | json |
| `lang` | 语言 | cn/en |
## 结果文件格式
每个查询的结果保存为单独的JSON文件,文件名格式:
```
0001_Bohemian_Maxi_Dress.json
0002_Vintage_Denim_Jacket.json
...
```
JSON文件结构示例:
```json
{
"items": {
"item": [
{
"detail_url": "https://www.amazon.com/...",
"num_iid": "B07F8S18D5",
"pic_url": "https://...",
"price": "9.99",
"reviews": "53812",
"sales": 10000,
"stars": "4.7",
"title": "商品标题"
}
],
"page": "1",
"page_size": 100,
"real_total_results": 700,
"q": "搜索词"
},
"error_code": "0000",
"reason": "ok"
}
```
## 日志文件
运行日志保存在 `amazon_crawler.log`,包含:
- 每个请求的状态
- 成功/失败统计
- 错误信息
- 爬取进度
示例日志:
```
2025-01-07 10:00:00 - INFO - Amazon爬虫启动
2025-01-07 10:00:01 - INFO - [1/5024] (0.0%) - Bohemian Maxi Dress
2025-01-07 10:00:02 - INFO - ✓ 成功: Bohemian Maxi Dress - 获得 700 个结果
```
## 注意事项
### 1. API限制
- 注意API的请求限制(每日/每月配额)
- 建议设置适当的延迟时间(--delay参数)
- 从API响应中可以查看配额信息:`api_info` 字段
### 2. 断点续爬
如果爬取中断,可以使用 `--start` 参数从指定索引继续:
```bash
# 从第1000个查询继续
python amazon_crawler_v2.py --start 1000
```
### 3. 查询文件格式
`queries.txt` 文件要求:
- UTF-8 编码
- 每行一个查询关键词
- 空行会被自动跳过
### 4. 错误处理
- 请求失败的查询会保存错误信息到JSON文件
- 所有错误都会记录在日志文件中
- 可以通过日志文件查找失败的查询并重新爬取
### 5. 结果分析
可以编写脚本统计和分析爬取结果:
```python
import json
from pathlib import Path
results_dir = Path("amazon_results")
total_items = 0
for json_file in results_dir.glob("*.json"):
with open(json_file) as f:
data = json.load(f)
if data.get('error_code') == '0000':
items = data.get('items', {}).get('item', [])
total_items += len(items)
print(f"共爬取 {total_items} 个商品")
```
## 性能优化
### 1. 并发爬取
当前脚本是串行爬取,如果需要提高速度,可以:
- 将查询列表分割成多个文件
- 使用多个进程同时运行
- 或修改脚本支持多线程/异步请求
### 2. 内存优化
如果查询数量很大(如5024个),建议:
- 使用 `--max` 参数分批爬取
- 定期清理日志文件
### 3. 网络优化
- 选择网络稳定的环境运行
- 可以增加重试机制
- 使用代理(如有需要)
## 故障排除
### 问题1:API密钥错误
```
错误: 未配置API密钥!
```
**解决**:检查配置文件、命令行参数或环境变量是否正确设置
### 问题2:请求超时
```
请求失败: timeout
```
**解决**:
- 检查网络连接
- 增加超时时间(修改脚本中的 `timeout` 参数)
- 检查API服务是否正常
### 问题3:API配额耗尽
```
API返回错误: quota exceeded
```
**解决**:
- 等待配额重置
- 升级API套餐
- 使用 `--max` 参数限制爬取数量
### 问题4:文件编码错误
```
UnicodeDecodeError
```
**解决**:确保 `queries.txt` 是 UTF-8 编码
## 扩展功能
如果需要扩展功能,可以修改脚本添加:
1. **多页爬取**:每个查询爬取多页结果
2. **数据过滤**:按价格、评分等条件过滤商品
3. **数据库存储**:将结果存入数据库而非JSON文件
4. **重试机制**:失败的请求自动重试
5. **代理支持**:通过代理服务器发送请求
6. **异步请求**:使用 aiohttp 实现并发爬取
## 联系方式
如有问题,请查看:
- 万邦API文档:`万邦API_亚马逊.md`
- 项目README:`README.md`
- 日志文件:`amazon_crawler.log`
|