爬取京东商品评价信息实战

文章目录

    • 一、分析商品评价的页面信息
      • 1、请求参数分析
      • 2、接口返回信息分析
    • 二、爬取京东商品评价信息代码实现
      • 1、具体代码
      • 2、运行效果

网络爬虫

上期介绍了通过《mitmproxy实战-通过mitmdump爬取京东金榜数据》,能够上京东金榜的商品一般评价都是比较好的,这次介绍如何爬取京东商品的评价信息。

一、分析商品评价的页面信息

1、请求参数分析

京东的商品评价信息是在商品的详情页面,我们随便访问一个京东的商品详情页面如https://item.jd.com/100087971268.html
在这里可以看到100087971268就是商品ID也是商品的skuId,这个是商品的唯一ID可以和很过信息关联。我们可以通过chrome浏览器的调试模式来分析商品评价信息的数据是如何获取和展示的。
通过chrome浏览器的调试模式可以看到,评价信息是通过https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1710122207175&loginType=3&uuid=181111935.16953916127351737253418.1695391613.1709713566.1710121957.56&productId=100087971268&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1&bbtf=&shield=
这个接口来返回的,其中关键的信息包括functionId=pc_club_productPageComments,productId=100087971268,page=0&pageSize=10。
productId=100087971268表示是获取商品ID为100087971268的商品评价,page=0&pageSize=10表示当前页是0,每页显示10条记录。
分析详情页

2、接口返回信息分析

我们可以切换到Response的标签页,分析接口的返回信息
商品评价接口返回信息分析

在这里可以看到通过接口反馈的是一个json格式的数据,其中评价信息就在comments的节点里,我们只要解析这个json就可以得到具体的评价信息了。
通过参数的分析和返回结果的分析后,就可以开始编码实现了。

二、爬取京东商品评价信息代码实现

编码主要实现两个部分的内容
1、是要组织请求参数,将请求URL的一些参数用变量替换,如商品ID,当前页等。
2、是要解析返回的JSON数据,从JSON数据中解析获取需要的评价信息以及下载评价信息中的图片。
在组织请求参数的时候,有两个关键信息,一个是Cookie信息,一个是请求的URL,因为访问京东的接口要登录,所以需要Cookie的信息。这些信息都可以在登录到京东后在chrome浏览器的调试模式中可以拿到。
组织请求参数

1、具体代码

具体代码如下:
getJDProdComments.py

import json
import os
import requests
from urllib.request import urlretrieve
import timesleeptime = 1  # 休眠时间# 浏览器访问伪装
headers = {'cookie': '___jdu=16953916127351737253418; shshshfpa=423ebd76-fc1a-89d5-d47a-a981cedfdsf57-1686fds5177; shshshfpx=423ebd76-fc1a-89d5-d47a-a981ced31f57-1686405177; pinId=OlFK9xcJEZ3Ep3CJn7-LwLV9-x-f3wj7; pin=jd_5ab1043c91fdff; unick=xiejava; _tp=xRz2UIA0gXgQ0KtQA8IW%2BhMgOusl53MovCk%2FP0TxaIM%3D; _pst=jd_5ab1043c91bff; PCSYCityID=CN_430000_430100_0; areaId=18; ipLoc-djd=18-1482-48942-49058; b_dh=1179; b_dpr=1.100000023841858; b_webp=1; b_avif=1; autoOpenApp_downCloseDate_auto=1705396790105_1800000; b_dw=1555; __jdv=91748099|baidu|-|organic|notset|1705397493195; jsavif=1; mba_muid=16953916127351737253418; wlfstk_smdl=4d5qhwajihbur3xtxm1dghq2bwl9ebii; 3AB9D23F7A4B3C9B=ONVXQU6KOVA46KLMDJWYJ2CLCGZLCKH4NFEKT6ANBHIYQJBOWM3KHFJ3RT5NO6GKP2BQVONOJWLAKMJUMNJOAMEHJE; TrackID=1wLmzwr1GPygNiM7hoidalzvJbkLlnJRs7c_e2wlsv7h_VHaLyqnXTiW1_vIDBhlEusopAT977EO67KV2n2vMV9jMUQx8MO9jJQMMv8skxrE; thor=C1CD4973B7F47EE1FE45201B5AB2281DC485D58F5BD12AA8CEC6335A9B07F5E3F1BFD9D9DEA859A32AEDE0F33C45B55AA44327ACD87A8E174C645BE4BC987735B3DD969561D2D0AA492DD1FEC1A793AF265724B02F9850F35F0CA58E8E4A5A3C212B0734C80AD560D299EC59026506C127E953C92D271932DDDBF32BEC59091745A6CB143671358CC8A866B9A298AA865F60B9AC41AD05C6EB6781C131BD05DD; flash=2_7Kqrs87KZ1MjgKXGB8QJTs9NjTmYiJCdEV8xYwXCMezATHn-bD7kirFJuQx5ogyzo_yuQHefS-MTOx8D5rxn-5ZxA8-qMHyBfYw-1ULH1bq*; ceshi3.com=103; __jdc=181111935; token=7482844f43473090375d99ad860b4294,3,947486; __tk=mLVlrKTimJznoD3PmcVvYmZmldTlkbVaommnjmTankZOmmPDolZTZmTfSJvkYRmblDzYrLKC,3,947486; shshshsID=a8f2acdf15967d81d4c5d8b5a45b7796_1_1705476526446; 3AB9D23F7A4B3CSS=jdd03ONVXQU6KOVA46KLMDJWYJ2CLCGZLCKH4NFEKT6ANBHIYQJBOWM3KHFJ3RT5NO6GKP2BQVONOJWLAKMJUMNJOAMEHJEAAAAMNCZJJB5QAAAAAD26SPFPWINAFQMX; _gia_d=1; shshshfpb=BApXeNARaFehAyBNmDl1nYWazwPZ1Fa6NB8QBVlhW9xJ1Mt5if4S2; __jda=181111935.16953916127351737253418.1695391613.1705471486.1705476528.12; __jdb=181111935.1.16953916127351737253418|12.1705476528; joyya=1705472508.1705476529.27.0u3hno2','referer': 'https://item.jd.com/','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.37',
}jd_prod_pic_save_path = 'jd_prod_pic'  # 图片保存目录page_range = 50   # 翻50页取500条记录def getJDProdComment(prod_skuId):big_pag_path = '//img30.360buyimg.com/shaidan/s616x405_jfs/'  # 评价大图地址tiny_pag_path = '//img30.360buyimg.com/n0/s128x96_jfs/'       # 评价缩略图地址for i in range(page_range):comments_url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1705853247039&loginType=3&uuid=181111935.16953916127351737253418.1695391613.1705847111.1705852812.35&productId='+str(prod_skuId)+'&score=0&sortType=5&page='+str(i)+'&pageSize=10&isShadowSku=0&fold=1&bbtf=&shield='data = requests.get(comments_url, headers=headers)if data:content_data=data.content.decode('utf-8')json_data=json.loads(content_data)print(json_data)if i == 0:productCommentSummary=json_data.get('productCommentSummary')print(prod_skuId, str(productCommentSummary))hotCommentTagStatistics=json_data.get('hotCommentTagStatistics')print(prod_skuId,str(hotCommentTagStatistics))comments=json_data.get('comments')if comments and len(comments)>0:for comment in comments:prod_comment_guid=comment.get('guid')prod_comment_content=str(comment.get('content'))prod_comment=str(comment)images=comment.get('images')savepath=os.path.join(jd_prod_pic_save_path,str(prod_skuId),'comments',prod_comment_guid)if images and len(images)>0:for image in images:str_image_url=image.get('imgUrl').replace(tiny_pag_path, big_pag_path)image_url='https:'+str_image_urlfilename=os.path.basename(image_url)downloadfile(image_url, savepath, filename) #下载图片time.sleep(sleeptime)print(prod_comment_guid,prod_skuId,prod_comment_content,prod_comment)time.sleep(sleeptime)def downloadfile(downloadurl,savepath,savefilename):savefile = os.path.join(savepath, savefilename)try:if not os.path.exists(savepath):os.makedirs(savepath)# 判断文件是否存在,如果不存在则下载if not os.path.isfile(savefile):print('Downloading data from %s' % downloadurl)urlretrieve(downloadurl, filename=savefile)print('\nDownload finished!')else:print('File already exsits!')# 获取文件大小filesize = os.path.getsize(savefile)# 文件大小默认以Bytes计, 转换为Mbprint('File size = %.2f Mb' % (filesize / 1024 / 1024))except Exception as e:print('downloadfile Error:', e)if __name__ == '__main__':getJDProdComment('100087971268')

以上代码中的Cookie信息,需要根据自己登录后从chrome浏览器的调试模式中拿到的Cookie信息替换。

2、运行效果

运行效果:

运行效果


作者博客:http://xiejava.ishareread.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/529270.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(黑马出品_05)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

(黑马出品_05)SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技…

【STM32】STM32F4中USART的使用方法和Printf的重定义(基于CubeMX和Keil)

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 生成代码 三、Keil重定义Printf3.1 勾选“UseMicroLIB”3.2 添加头文件和修改fputc和fgetc 四、测试Printf的效果4.1 字符串测试4.2 格式化输出测试 五、存在问题的解决方法5.1 检查串口号是否一致5.…

后端八股笔记------Redis

Redis八股 上两种都有可能导致脏数据 所以使用两次删除缓存的技术,延时是因为数据库有主从问题需要更新,无法达到完全的强一致性,只能达到控制一致性。 一般放入缓存中的数据都是读多写少的数据 业务逻辑代码👇 写锁&#x1f4…

[短文]不同空白字符导致程序执行失败问题

屏幕显示的一个空白字符,对于编程者来说,并无差异,但底层截然不同的表示方法,极大可能导致程序执行失败! 今天博主就遇到一个空格字符的问题,大概情况是前端编写SQL传入,后端有时可以执行&…

Deep Learning for Detecting Robotic Grasps

链接:1301.3592.pdf (arxiv.org) 这个用于从单一RGB-D视图进行机器人抓取检测的算法包括以下步骤: 图像获取: 机器人获取包含待抓取对象的场景的RGB-D图像。 抓取评分: 使用小型深度网络对RGB-D图像中的潜在抓取进行评分。抓取以在…

C++进阶之路---多态(一)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、多态的概念 1.概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为…

qt-C++笔记之使用Cmake来组织和构建QWidget工程项目

qt-C笔记之使用Cmake来组织和构建QWidget工程项目 —— 杭州 2024-03-10 code review! 文章目录 qt-C笔记之使用Cmake来组织和构建QWidget工程项目1.运行2.文件结构3.CMakeLists.txt4.main.cpp5.widget.h6.widget.cpp7.widget.ui 1.运行 2.文件结构 3.CMakeLists.txt 代码 c…

Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容

文章目录 1、软件要求2、安装CUDA2.1、安装gcc2.2、安装CUDA 3、安装Anaconda33.1、下载Anaconda33.2、创建python虚拟环境 4、部署系统4.1、下载源码4.2、安装依赖4.3、下载模型4.4、初始化配置和知识库4.4.1、初始化配置4.4.2、初始化知识库 4.5、运行4.6、运行4.6.1、启动4.…

官宣正式成为 PostgreSQL Contributor,Richard 有何秘诀?

作为世界上最受欢迎的开源数据库之一,PostgreSQL 国际社区于3月3日正式公布了新加入的 PostgreSQL Contributor 名单,以认可为 PostgreSQL 开源项目做出实质性、长期贡献的人员。本次公布的名单中包括 3 名 Contributor 和 6 名 Major Contributor。 拓…

如何保证消息的顺序性

先看看顺序会错乱的场景:RabbitMQ:一个 queue,多个 consumer,这不明显乱了: 解决方案:

Arm MMU深度解读

文章目录 一、MMU概念介绍二、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围) 三、Translation regimes四、地址翻译/几级页表?4.1、思考:页表到底有几级?4.2、以4KB granule为例,页表的…

Dgraph 入门教程四《开发环境的搭建》

在深入 了解Dgraph 之前,我们先了解下开发环境,毕竟让开发人员真正动起手来才是第一步。 Dgraph 支持很多种语言的开发,包括GO,Python,JS,C#和Java等等。出于项目需要,只了解下JS和Java。 1、…