Python使用requests方法爬取京东商品评论并保存为CSV文件实战指南

在电商平台中,用户评论是非常重要的数据,它可以帮助我们了解商品的优缺点、用户的使用体验等。本文将介绍如何使用 Python 爬取京东商品的评论数据,并将数据保存为 CSV 文件。我们将从京东商品评论页面获取评论内容、评分、用户昵称、评论时间等信息,并额外爬取每条评论的图片数量。

首先给出完成的源代码:

import requests
import csv
import json
import time

# 创建文件对象
f = open('data.csv', mode='w', encoding='utf-8-sig', newline='')
# 更新 fieldnames,添加 imageCount
csv_writer = csv.DictWriter(f, fieldnames=['nickname', 'score', 'content', 'productColor', 'creationTime', 'imageCount'])
csv_writer.writeheader()

# 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 基础URL
base_url = 'https://club.jd.com/comment/productPageComments.action'

# 构建循环爬取 1-5 分评论
for score in range(1, 6):  # 1-5 分
    print(f'正在采集 {score} 分的评论数据')
    params = {
        'productId': '100142621600',  # 商品ID
        'score': score,  # 评分类型(1-5 分)
        'sortType': 5,  # 排序类型(5表示推荐排序)
        'page': 0,  # 页码
        'pageSize': 10,  # 每页评论数量
        'isShadowSku': 0,  # 是否影子商品
        'fold': 1  # 是否折叠
    }

    # 构建循环翻页
    for page in range(1, 6):  # 每分爬取前 5 页
        print(f'正在采集第{page}页的数据内容')
        params['page'] = page

        # 发送请求
        response = requests.get(base_url, params=params, headers=headers)
        if response.status_code != 200:
            print(f'请求失败,状态码:{response.status_code}')
            continue

        # 解析JSON数据
        json_data = response.json()

        # 提取评论所在列表
        comments = json_data['comments']

        # 遍历评论
        for index in comments:
            # 提取具体评论信息, 保存字典
            dit = {
                'nickname': index.get('nickname', ''),  # 昵称
                'score': index.get('score', ''),  # 评分
                'content': index.get('content', ''),  # 评论内容
                'productColor': index.get('productColor', ''),  # 产品颜色
                'creationTime': index.get('creationTime', ''),  # 评论时间
                'imageCount': len(index.get('images', []))  # 图片数量
            }
            # 写入数据
            csv_writer.writerow(dit)
            print(dit)

        # 防止请求过快,适当延时
        time.sleep(1)

# 关闭文件
f.close()

 运行结果:

接下来我们一步步分析代码是如何生成的

1. 准备工作

在开始之前,我们需要安装以下 Python 库:

  • requests:用于发送 HTTP 请求。

  • csv:用于处理 CSV 文件。

  • json:用于解析 JSON 数据。

  • time:用于设置请求间隔,防止被封禁

  • 你可以通过以下命令安装这些库:

    pip install requests

     

    2. 分析京东评论接口

    京东的商品评论数据是通过 AJAX 请求加载的,我们可以通过浏览器的开发者工具(F12)找到评论数据的接口。经过分析,我们发现评论数据的接口如下:

    https://club.jd.com/comment/productPageComments.action

     

    该接口支持以下参数:

  • productId:商品 ID。

  • score:评分类型(1-5 分)。

  • sortType:排序类型(5 表示推荐排序)。

  • page:页码。

  • pageSize:每页评论数量。

  • isShadowSku:是否影子商品。

  • fold:是否折叠。

  • 3. 编写爬虫代码

    接下来,我们编写 Python 代码来爬取评论数据并保存为 CSV 文件。

    3.1 导入库

    首先,导入所需的库:

    import requests
    import csv
    import json
    import time

    3.2 创建 CSV 文件

    我们使用 csv.DictWriter 来创建一个 CSV 文件,并定义表头:

     

    # 创建文件对象
    f = open('data.csv', mode='w', encoding='utf-8-sig', newline='')
    # 定义表头
    csv_writer = csv.DictWriter(f, fieldnames=['nickname', 'score', 'content', 'productColor', 'creationTime', 'imageCount'])
    csv_writer.writeheader()

    3.3 设置请求头

    为了模拟浏览器请求,我们需要设置请求头:

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }

     

    3.4 构建请求参数

    我们使用循环来爬取 1-5 分的评论数据,并设置每页爬取 10 条评论,总共爬取 5 页:

    # 基础URL
    base_url = 'https://club.jd.com/comment/productPageComments.action'
    
    # 构建循环爬取 1-5 分评论
    for score in range(1, 6):  # 1-5 分
        print(f'正在采集 {score} 分的评论数据')
        params = {
            'productId': '100142621600',  # 商品ID
            'score': score,  # 评分类型(1-5 分)
            'sortType': 5,  # 排序类型(5表示推荐排序)
            'page': 0,  # 页码
            'pageSize': 10,  # 每页评论数量
            'isShadowSku': 0,  # 是否影子商品
            'fold': 1  # 是否折叠
        }

    3.5 发送请求并解析数据

    我们使用 requests.get 发送请求,并解析返回的 JSON 数据:

      # 构建循环翻页
        for page in range(1, 6):  # 每分爬取前 5 页
            print(f'正在采集第{page}页的数据内容')
            params['page'] = page
    
            # 发送请求
            response = requests.get(base_url, params=params, headers=headers)
            if response.status_code != 200:
                print(f'请求失败,状态码:{response.status_code}')
                continue
    
            # 解析JSON数据
            json_data = response.json()
    
            # 提取评论所在列表
            comments = json_data['comments']

    3.6 提取评论信息并保存到 CSV

    我们遍历每条评论,提取所需的信息,并将其保存到 CSV 文件中:

     

        # 遍历评论
            for index in comments:
                # 提取具体评论信息, 保存字典
                dit = {
                    'nickname': index.get('nickname', ''),  # 昵称
                    'score': index.get('score', ''),  # 评分
                    'content': index.get('content', ''),  # 评论内容
                    'productColor': index.get('productColor', ''),  # 产品颜色
                    'creationTime': index.get('creationTime', ''),  # 评论时间
                    'imageCount': len(index.get('images', []))  # 图片数量
                }
                # 写入数据
                csv_writer.writerow(dit)
                print(dit)
    
            # 防止请求过快,适当延时
            time.sleep(1)

     

    3.7 关闭文件

    最后,关闭 CSV 文件

     

    制作不易,如果这篇文章帮到您,给博主一个小小的赞吧吧😃😃😃😃

    作者:小白的代码日记

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python使用requests方法爬取京东商品评论并保存为CSV文件实战指南

    发表回复