一、前言

本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段“sku”拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据将可以用于后续的统计分析或更深层次的挖掘分析。

二、爬取步骤详解

1. 找到真实的url

所有的爬虫都是要靠真实的url去获取并解析数据,京东商品评论数据网址是做了一定的反爬措施的。以“华为手机”为搜索关键字为例,点击任意一个华为手机,进入该手机的详情页面,继续点击“商品评价”,随便复制一句评论数据,右键查看网页源代码,Ctrl+F打开搜索框,粘贴刚才复制的评论数据,发现并没有找的该数据。

这时候就需要立刻打开浏览器调试工具了,右键点击“检查“”即可,打开调试工具之后,依次按下图点击。

然后继续找到“商品评论”并点击,好评、中评、差评。

点击完之后,经自己一个个网址查看,我们找到了https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100011762575&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1这个网址有我们需要的数据。

2. 分析网址参数

找到真实的url后,我们还不能直接下结论其就是真实的url,复制该url,打开新链接,发现数据还是我们刚才调试时看到的额数据,证明了我们找到了真实的url。

开始分析url参数,很明显,“callback=fetchJSON_comment98”为回调函数,我们发现上图中也有该数据,对于这类参数,可以直接删除。

删除该参数之后,重新刷新网址,发现该数据在源数据已经消失了,说明该参数并不影响我们爬取数据。
继续分析,我们发现“score=0”,如果掌握基本英文知识,很容易猜到“score=”后的数字表示评论数据分类,经笔者分析,0表示全部评论,1、2、3分别表示差评、中评、好评的评论,由于全部评论中包含部分差中好评论,本文只爬取这差中好三类数据。
接着分析该url参数,显而易见,“productId=”后的一串数据即为商品的唯一id,对应商品列表页sku字段。至此,我们已经找到了构造真实url的参数,下面开始写代码爬取。

三、完整代码

1. 导入所需包

import requests
import json
import time
import re
import random
import pandas as pd
from faker import Faker
from multiprocessing import Pool
import os
from openpyxl import Workbook, load_workbookfrom python爬虫.爬虫项目 import random_ip
ip = random_ip.dailiips()

其中,json用于解析Json格式数据,faker用于生成随机浏览器请求头,multiprocessing为多进程相关模块,最终两行为笔者的的代理IP生成模块。免费的代理IP对京东来说作用不大,大家可以直接忽视该参数。

2. 创建保存数据的文件

try:wb = load_workbook(filename='京东双十一华为手机评论信息.xlsx')sheet = wb.active
except:wb = Workbook()sheet = wb.active  # 激活工作簿sheet.title = '京东双十一华为手机评论信息'  # 设置工作簿名称# 设置表头sheet['A1'] = 'title'sheet['B1'] = 'user_id'sheet['C1'] = 'creationTime'sheet['D1'] = 'score'sheet['E1'] = 'content'

以上代码的意思是若没有“京东双十一华为手机评论信息.xlsx”文件,就直接创建该文件,有则直接打开文件。

3. 基本配置

headers = {'User-Agent': Faker().chrome(),'Referer': 'https://item.jd.com/100011386554.html'
}base_url = 'https://club.jd.com/comment/productPageComments.action?&productId=100011177233&score=1&sortType=5&page=1&pageSize=10&isShadowSku=0&fold=1'

主要是构造请求头和base网址,方便后续使用。

4. 主体爬虫代码

def get_comment_id(start, end):'''读取京东商品的商品标题和sku(sku暂不知晓,记为商品评论唯一id):param start: 开始的索引:param end: 结束的索引:return: 标题、skus列表'''df = pd.read_excel(r'C:\Users\HTHDS\Desktop\python\python爬虫\爬虫项目\京东双十一华为手机信息.xlsx')names = df['name'][start:end]skus = df['sku'][start:end]return names, skusdef get_maxpage(sku):'''获取每类评论(好评、中评和差评)的最大页数:param sku: 商品评论唯一id:return:'''global base_urlmaxpagelist = []for score in [1, 2, 3]:url = base_url.replace('score=1', f'score={score}').replace('productId=100011177233', f'productId={sku}')print(url)response = requests.get(url, proxies=random_ip.dailiips(), headers=headers).texthtml = responsejson_data = json.loads(html)maxpagelist.append(int(json_data['maxPage']))return maxpagelistdef get_url(score, page, sku, title):'''获取每页评论的评论数据:param score: 评论类别:param page: 页码:param sku: 商品唯一id:param title: 标题:return: 获取到的评论数据'''global base_urlprint('正在爬取第{}页,id={}'.format(page, os.getpid()))url = base_url.replace('page=1', f'page={page}').replace('score=1', f'score={score}').replace('productId=100011177233', f'productId={sku}')data_list_list = get_comment(url, headers=headers, title=title)  # 调用采集方法return data_list_listdef get_comment(url=None, headers=None, title=''):'''采集评论数据:param url: 评论链接:param headers: 请求头:param title: 标题:return: 获取到的评论数据'''data_list_list = []response = requests.get(url, proxies=random_ip.dailiips(), headers=headers).texthtml = responsejson_data = json.loads(html)comment = json_data['comments']for data in comment:user_id = data['id']   # 评论用户idcreationTime = data['creationTime']   # 评论时间content = data['content'].strip()   # 评论文本content = re.sub('\n','',content)score = data['score']  # 评分data_item = [title, user_id, creationTime, score, content]data_list_list.append(data_item)print(data_item)return data_list_listdef write_comment(data_list_list=None):for data in data_list_list:sheet.append(data)

以上即为主体的京东商品评论爬取代码,爬取逻辑是先获取商品标题和sku,然后获取每类评论的最大页数,接着拼接真实的url,解析数据后并添加到到Excel文件中,其中write_comment可以合并到解释数据中,笔者这样写只是让爬取过程更清晰,方便理解代码。

5. 开启爬虫程序

def main():start = time.time()# 创建10个进程pool = Pool(10)names, skus = get_comment_id(13, 14)for name, sku in zip(names, skus):print(name)sp = get_maxpage(sku)for s, v in enumerate(sp):for p in range(int(v)):pool.apply_async(get_url, args=(s+1, p, sku, name), callback=write_comment)time.sleep(random.randint(5, 8))time.sleep(random.randint(60, 80))pool.close()  # 无任务就关闭所有子进程pool.join()  # 子进程未结束阻止主进程执行下面程序wb.save(filename='京东双十一华为手机评论信息.xlsx')end = time.time()print('此次爬完数据用时:', (end-start))if __name__ == '__main__':main()

main函数里主要是构建起整个爬虫的过程,若读者还未了解过Python多进程相关的知识,建议先把该方面的知识补全再来看代码的运行逻辑。但尽管本文用到了多进程的爬取方式,但并没有发挥多大作用,京东在访问的时间限制上做的比较严格,不如直接用单线程爬取。

6. 结果

爬取到的部分数据如下:

本文完成了京东商品评论数据的爬取全过程,其中有些细节笔者可能没有讲到,这需要大家自己动手实践,提升自己的爬虫能力与效率。申明:本文爬取京东商品仅为技术交流,建议不可过快过多爬取京东的网页数据,以免造成不必要的麻烦!

Python爬取京东商品评论数据相关推荐

  1. Python爬取京东商品评论

    京东商城的页面不是静态页面,其评论信息存放于json文件中,由ajax控制,所以我们在浏览器上看到的网页源代码和用Python爬下来的是不一样的,所以我们真正要爬取的是评论数据所存放的json文件. ...

  2. Python爬取京东商品评论和图片下载

    Python爬取京东商品评论和图片下载 代码仅供学习使用,切勿扩散并且频繁爬取网站 贴上代码和注释,方便自己下次看 import requests import time import json im ...

  3. Python 爬取京东商品评论 + 词云展示

    利用python爬虫爬取京东商品评论数据,并绘制词云展示. 原文链接:https://yetingyun.blog.csdn.net/article/details/107943979 创作不易,未经 ...

  4. python爬取京东商品数据要先登录_手把手教你用python 爬取京东评论

    本次python实战,主要目标是利用 Python爬取京东商品评论数,如上图所示:爬取"Python之父"推荐的小蓝书,这些信息主要包括用户名.书名.评论等信息. 爬取的网址url ...

  5. python制作爬虫爬取京东商品评论教程

    python制作爬虫爬取京东商品评论教程 作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计 ...

  6. Python动态爬虫爬取京东商品评论

    Python 动态爬虫爬取京东商品评论 1. 概述 京东商城是Python爬虫初学者试手的经典平台,反爬虫程度较低,但评论采取了动态加载的方式,爬取京东商品评论是学习动态爬虫的一个极佳方法. 动态爬虫 ...

  7. python爬虫爬取京东商品评价_网络爬虫-爬取京东商品评价数据

    前段时间做商品评价的语义分析,需要大量的电商数据,于是乎就自己动手爬取京东的数据.第一次接触爬虫是使用selenium爬取CNKI的摘要,基于惯性思维的我仍然想用selenium+Firefox的方法 ...

  8. 商品评论html,京东商品评论太多(带你一键爬取京东商品评论)

    京东商品评论太多(带你一键爬取京东商品评论) 一.项目说明 1.项目背景 一天,一朋友扔给我一个链接https://item.jd.com/100000499657.html,让我看看这个歌商品的所有 ...

  9. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

最新文章

  1. python顺序执行多个py文件的方法
  2. JVM参数设置和分析
  3. c语言指向常量的指针和常量指针
  4. 1151 LCA in a Binary Tree (30 分)【难度: 难 / 知识点: LCA 未完成】
  5. Java多线程之线程池的手写改造和拒绝策略
  6. html5画板功能,JS实现canvas简单小画板功能
  7. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
  8. 软件工程要学python吗_软件工程师必须得会Python编程吗?
  9. 信息系统项目管理十大管理过程整理
  10. 群晖邮箱服务器需要什么证书,群晖NAS邮件通知及两步验证登录详解
  11. is not backed by gradle android,Module … is not backed by gradle
  12. Android-蓝牙的网络共享与连接分析
  13. 文件监控脚本 -- Linux bash
  14. python处理表格数据教程_利用Python处理Excel数据
  15. 计算机基础(07)密码学基础
  16. BFC、文档流、脱离文档流
  17. FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法
  18. 百度网盘视频倍速播放
  19. 掘金秋招征文大赛评选结果
  20. JAVA旅游(工厂方法模式)

热门文章

  1. 音乐计算机编程,计算机音乐编程的基本类型研究
  2. RT_thread空闲线程及两个常用的钩子函数
  3. 二级c语言培训资料,全国计算机二级考试C语言,培训资料.doc
  4. auto.js B0013 查找父控件子控件进入阅读文章视频学习每日答题2021-10-03
  5. python 中文变量名_大疆机甲大师Python开发: 中文命名变量初尝试
  6. 软件工程实践2019第一次作业
  7. 计算机系统原理实验之BombLab二进制炸弹1、2关
  8. JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,respon 区别
  9. java打印超市消费小票_Java-超市购物小票案例-详细介绍
  10. 【获奖案例巡展】信创先锋之星——云上贵州信创工程中心大数据中台