如何在JavaScript控制台将多页面爬取的亚马逊评论存储到单个变量
亚马逊多页面评论抓取与单变量存储实现方案
核心思路
用一个**全局容器(优先选列表)**统一存储所有页面的评论数据,每爬完一页就把当前页的评论追加到这个容器里,等所有页面爬取完成后,再一次性导出数据,而非逐页处理。
具体实现步骤
1. 初始化全局存储变量
在代码开头定义空列表,用来承接所有页面的评论:
# 初始化存储全部评论的全局变量 all_reviews = []
2. 循环爬取多页面并追加数据
假设你已经有单页面爬取函数fetch_single_page_reviews(page_url),该函数返回当前页的评论列表(每条评论以字典形式存储),循环处理所有页面:
方式1:已知所有页面URL列表
# 示例:提前获取到的所有评论页URL page_urls = [ "https://www.amazon.com/xxx/product-reviews/page=1", "https://www.amazon.com/xxx/product-reviews/page=2", # 更多页面URL... ] for url in page_urls: # 爬取当前页评论 page_reviews = fetch_single_page_reviews(url) # 将当前页评论追加到全局变量(用extend避免嵌套列表) all_reviews.extend(page_reviews)
方式2:动态构造页面URL(按页码)
如果能拿到总页数,或者设定最大爬取页数,直接通过页码拼接URL:
max_page = 15 # 可从页面解析总页数,或自行设定上限 base_url = "https://www.amazon.com/xxx/product-reviews/page={}" for page_num in range(1, max_page + 1): current_url = base_url.format(page_num) page_reviews = fetch_single_page_reviews(current_url) all_reviews.extend(page_reviews)
3. 一次性导出全部数据
爬完所有页面后,all_reviews已存储所有评论,统一导出为JSON或CSV:
导出为JSON
import json with open("amazon_all_reviews.json", "w", encoding="utf-8") as f: json.dump(all_reviews, f, ensure_ascii=False, indent=2)
导出为CSV
import csv if all_reviews: # 取第一条评论的键作为CSV表头 header = all_reviews[0].keys() with open("amazon_all_reviews.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=header) writer.writeheader() writer.writerows(all_reviews)
关键注意事项
- 反爬处理:亚马逊反爬严格,爬取时要加合法请求头、设置1-3秒的请求延迟,避免IP被封。
- 异常容错:循环中加入异常捕获,防止单页爬取失败中断整个流程:
for page_num in range(1, max_page + 1): try: current_url = base_url.format(page_num) page_reviews = fetch_single_page_reviews(current_url) all_reviews.extend(page_reviews) except Exception as e: print(f"第{page_num}页爬取失败: {str(e)}") continue
- 动态获取总页数:可以先爬第一页,解析页面中的总评论页数(比如从"Page 1 of 15"这类文本中提取),再动态生成所有页面URL,避免硬编码页数。
内容的提问来源于stack exchange,提问作者Adeel Ahmad
相关产品推荐
相关产品推荐

