电商API接口|爬虫案例|采集某东商品评论信息

news2024/11/24 14:24:05

前言

平常大家都有网上购物的习惯,在商品下面卖的好的产品基本都会有评论,当然也不排除有刷评论的情况,因为评论会影响我们的购物决策。今天主要分享用python+re正则表达式获取京东商品评论。API接口获取京东平台商品详情SKU数据!

环境准备

pyhon编译器版本python3.7.4

集成开发环境(IDE)pycharm版本2020.1.5

相关包的安装

pip install requests

整体框架

  • 分析商品评论网页

  • 发送请求,获取响应内容

  • re正则表达式提取信息

  • pandas保存信息

  • 运行主程序

  • 总结

  1. 分析网页

打开京东官网,我搜的是电脑,因为是获取商品的评论,我选了评论数比较多的产品,然后可以在下方可以看到商品的评论。

图片

接下来就是按F12,选择网页。然后点击第二页刷新网页。在往下拉的过程中可以看到有个productPageComments.......页面,点击然后看下预览。下方就可以看到评论信息comments,依次点开后查看第一个信息,网页往上拉返回可以看到网页的信息和我们要查看的信息一致。

图片

正是我们需要找的信息,这里注意的是因为选择第二页刷新的信息,如果第一页刷新过,也有第一页的网页productPageComments,如何去辨别呢。我们可以看下参数信息,也就是查看载荷。

图片

看下参数下面有个page:1。注意刷新的页面还是第二页。这个很容易判断是第一页。我们先滚动页面,继续找到productPageComments,然后可以看到载荷下面的参数page:0

图片

也就是页面的规律是从0开始的,我们可以再验证一下,选择第三页刷新看载荷下方的参数,顺便看下参数是否有加密。

图片

第三页可以发现page:2,说明页面就是从0开始的,然后看下其他的参数基本不变,没有出现加密的情况,变化的主要page。这就是我们要找的网页页面规律。

然后需要看下响应的内容,继续回到预览,可以看到一页有10条评论,初步判断格式比较像json格式,json格式的数据和python数据结构的字典比较类似,这里面涉及python的基本语法,不在这赘述。

2.发送请求,获取响应内容

首先看下标头信息

图片

我们需要了解基本的请求网址,请求方法,状态码。

请求方法是get,后面就可以通过get方法向网页发送请求,有些网页是post。状态码是200,说明请求是ok的,如果遇到其他状态码,说明请求不成功,比如304,503。具体的状态码不在这赘述,可以网上查资料了解。不妨借助下ChatGPT的回答

图片

图片

图片

ChatGPT的回答还是比较详细,给它点个赞

图片

另外需要看的是请求标头下方的信息,比如cookie,user_agent。

图片

cookie是用来存储用户信息,服务器会去识别用户的信息。一般请求头需要带上cookie来做浏览器的伪装。下面看下百科的解释

图片

然后对比下ChatGPT的回答

图片

图片

user_agent(用户代理)是电脑的基本信息,电脑系统的版本,用的浏览器版本等,一般也是用来做浏览器的伪装。

然后看下ChatGPT对User_agent的解释

图片

接下来看下具体的请求代码

图片

注释:定义函数获取响应内容,带上请求头信息,用requests 和get方法发送请求,text就是响应的内容。

3.re正则表达式提取信息

re(regular expression)正则表达式的作用是精确匹配网页的信息,提取关键信息,功能也是比较强大,比如提取用来数字包括小数,整数等,还可以用来提取邮箱,身份证信息等。

下面看下ChatGPT回答

图片

图片

图片

具体也可查阅其他资料详细了解其用法。

re提取信息的关键代码如下:

图片

4.用pandas来保存信息。

相关代码如下

图片

定义函数 参数是data,下面是字段名称,用pandas构造DataFrame保存到excel表格中。

5.运行主程序

考虑到程序的性能和评论的时效性,本次采集前50页信息,用for循环遍历每一页的url,然后批量获取每一页的信息。

相关代码如下

图片

图片

运行结果部分数据展示:

图片

图片

总共获取500条评论。

完整代码:

import requests
import re
import json
import pandas as pd
# 基本url

BASE_URL = "https://club.jd.com/comment/productPageComments.action?

callback=fetchJSON_comment98&productId=100035712310&score=0&sortType=5

&page={}&pageSize=10&isShadowSku=0&rid=0&fold=1"

# 定义函数访问页面
def scrape_url(n):
url = BASE_URL.format(n)
return url

def get_reviews_html(url):
# 请求头
headers = {
'cookie': '__jdu=1659013711311387516036; shshshfpa=96b8fa44-7940-4a82-dc6b-ae9ec11053d8-1671423464; shshshfpb=l3JPGq-Nsv3ryl-UYczuTVg; unpl=JF8EAMhnNSttXEhSBh0LG0IZTlsBW11YGx4LbDAHBllbHANXEwFIFBl7XlVdXxRKFB9sYxRUXVNLVA4ZBisSEXteXVdZDEsWC2tXVgQFDQ8VXURJQlZAFDNVCV9dSRZRZjJWBFtdT1xWSAYYRRMfDlAKDlhCR1FpMjVkXlh7VAQrAhwWGEpdVlhdCEkXA21uA1BdX0pWAisDKxUge21WWVwPSRYzblcEZB8MF1cBHwEZF11LWlBWXAhJEQNvZQVUX1FNUAUcAxkVIEptVw; __jdv=76161171|baidu-pinzhuan|t_288551095_baidupinzhuan|cpc|0f3d30c8dba7459bb52f2eb5eba8ac7d_0_5272781a847d41aa892f3c52ffc92b78|1677294929187; areaId=19; PCSYCityID=CN_440000_440300_0; shshshfpx=96b8fa44-7940-4a82-dc6b-ae9ec11053d8-1671423464; shshshfp=edea99a27fbc1b9e7a0a677bc566df49; __jdc=122270672; ip_cityCode=1601; ipLoc-djd=19-1607-4773-62121; jwotest_product=99; 3AB9D23F7A4B3C9B=JLXTWBOH4BNFVY37YNSE4B6N2OLXI7T6WIX336O237ZEYUEAF4RFRCLPN3AEBN5FK556TM2FSRQABIGENHAVETWTGA; jsavif=1; __jda=122270672.1659013711311387516036.1659013711.1677312527.1677330268.7; __jdb=122270672.1.1659013711311387516036|7.1677330268; shshshsID=426d0c1911285cc51524a751262039de_1_1677330269246; JSESSIONID=85D1CE4A20581F98C688EA0EFE2CB175.s1',
'referer': 'https://item.jd.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
}
# 发送请求
response = requests.get(url=url,headers=headers)
# 获取响应内容
result = response.text
print(result)
return result
# 创建空列表,用来存放信息
data = []
def get_goods_contents(result):
# 提取评论内容
content = re.findall('"guid".*?"content":"(.*?)"',result)
# print(content)
# 提取产品尺寸
productSize = re.findall('productColor":"(.*?)"',result)
# print(productSize)
# 提取产品配置
productConfig = re.findall('"productSize":"(.*?)"',result)
# print(productConfig)
# 提取评论创建时间
creationTime = re.findall('"creationTime":"(.*?)"',result)
# 用for 循环批次把信息储存到data
for i in range(len(productSize)):
data.append([productSize[i],creationTime[i],productConfig[i],content[i]])
# print(data)
return data
def save_reviews(data):
columns = ['产品尺寸','评论时间','产品配置','产品评论']
df = pd.DataFrame(data,columns=columns)
df.to_excel('电脑评论.xlsx',encoding='utf-8')
# 运行主程序
if __name__=='__main__':
for i in range(0,50):
# 调用函数依次访问页面
url =scrape_url(n=i)
# 调用函数获取响应内容
result = get_reviews_html(url)
# 调用函数获取数据
data = get_goods_contents(result)
# 调用函数保存信息

save_reviews(data)

总结:

  1. 本次主要实战采集京东商品电脑商品信息评论,其他商品换关键词就可以。

  2. 文章借助了ChatGPT对一些概念做了一些解释,比如cookie,表达式。加深对基本概念的理解与运用。

  3. 这些评论如何清洗分析,去挖掘其中的商业价值?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

API网关-Apinto压缩包方式自动化安装配置教程

文章目录 前言一、Apinto安装教程1. 复制脚本2. 增加执行权限3. 执行脚本4. Apinto命令4.1 启动Apinto4.2 停止Apinto4.3 重启Apinto4.4 查看Apinto版本信息4.5 加入Apinto集群4.6 离开Apinto集群4.7 查看Apinto节点信息 5. 卸载Apinto 二、Apserver(Apinto Dashboard V3)安装教…

powermock: 一个支持 gRPC 的 Mock Server

文章目录 背景选型架构安装配置使用教程快速开始接口定义配置启动 Mock 规则redis 插件HTTP Mock高级配置前置准备场景一 特定 ID 返回特定用户信息场景二 通过脚本返回用户数据 总结参考资料 本文介绍的是如何基于 bilibili 的开源方案 powermock 搭建一套通用的适用于自己公司…

11. 双目视觉之立体视觉基础

目录 1. 深度恢复1.1 单目相机缺少深度信息1.2 如何恢复场景深度?1.3 深度恢复的思路 2. 对极几何约束2.1 直观感受2.2 数学上的描述 1. 深度恢复 1.1 单目相机缺少深度信息 之前学习过相机模型,最经典的就是小孔成像模型。我们知道相机通过小孔成像模…

uniapp scroll-view用法[下拉刷新,触底事件等等...](4)

前言:可滚动视图区域。用于区域滚动 话不多说 直接上官网属性 官网示例 讲一下常用的几个 scroll 滚动时触发 scrolltoupper 滚动到顶部或左边,会触发 scrolltoupper 事件 scrolltolower 滚动到底部或右边,会触发 scrolltolower 事件 1.纵向滚动…

【揭秘】RecursiveAction全面解析

内容概要 RecursiveAction是Java中一个强大的工具,它允许将复杂任务分解为更小的子任务,这些子任务可以并行执行,从而提高整体性能,其主要优点在于能够有效地利用多核处理器,减少任务执行时间,并简化并行编…

SQL注入:盲注

SQL注入系列文章: 初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 SQL注入:报错注入-CSDN博客 目录 什么是盲注? 布尔盲注 手工注入 使用python脚本 使用sqlmap 时间盲注 手工注入 使用python脚本 使…

SpringBoot项目配置SSL后,WebSocket连接失败的解决方案

SpringBoot项目配置SSL后,WebSocket连接应使用wss协议,而不是ws协议。在前端配置WebSocket时,URL以wss://开头。

【计算机网络】中小型校园网构建与配置

拓扑图配置文件传送门 Packet Tracer-中小型校园网配置布局文件文件 相关文章 【计算机网络】IP协议及动态路由算法 【计算机网络】Socket通信编程与传输协议分析 【计算机网络】网络应用通信基本原理 原理 1. Network 广域网,WAN Wide Area Network&#xff…

记录浏览器能打开github.com,android studio无法拉取github项目,并且ping github.com也拼不通的问题

问题: Android studio编译flutter工程突然碰上如下问题: 在浏览器打开该地址能正常打开,尝试ping: 解决方式 通过搜索,查到如下办法: 1、首先在ipaddress.com中查询github.com域名的固定ip地址&#xff…

nginx使用stream模块代理端口

今天原本准备将本地金仓的54321端口进行代理的,但是发现代理后总是无法访问。后来突然发现之前使用nginx代理的是一个地址而不是端口。因此做以下笔记用来做记录。 一、stream安装与配置 假设nginx在usr/local/nginx中 1. 测试当前nginx是否有stream模块 ./usr/…

【数据结构1-1】线性表

线性表是最简单、最基本的一种数据结构,线性表示多个具有相同类型数据“串在一起”,每个元素有前驱(前一个元素)和后继(后一个元素)。根据不同的特性,线性表也分为数组(vector&#…

JVM基础知识汇总篇

☆* o(≧▽≦)o *☆嗨~我是小奥🍹 📄📄📄个人博客:小奥的博客 📄📄📄CSDN:个人CSDN 📙📙📙Github:传送门 📅&a…

【Docker】附录二:热门镜像介绍

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 热门镜像介绍 本章将介绍一些热门镜像的功能,使用方法等。包括 Ubuntu、CentOS、MySQL、MongoDB、Redis、Nginx、Wordpress、No…

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有: (1)在集群的每个节点上运⾏存…

Adobe ColdFusion 反序列化漏洞复现(CVE-2023-38203)

0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion存在代码问题漏洞,该漏洞源于受到不受信任数据反序列化漏洞的影响,攻击者通过漏洞可以代码执行,可导致服务器失…

6.小时表天分区和小时分区顺序错误,怎么办?

目录 一、解决思路二、修复表结构2.1 建表2.2查询数据2.3查询数据路径2.4删表重建2.5查询表结构2.6查询数据 三、恢复数据3.1方案1 直接移动原分区数据到新分区下3.2方案2 将分区路径指导原数据路径3.3方案3 通过临时表恢复数据 一、解决思路 对于这个问题,主要分为…

C++类和对象——构造函数与解析函数介绍

目录 1.构造函数和析构函数 1.构造函数,进行初始化 2.析构函数,进行清理 2.构造函数的分类及调用 1.括号法 注意: 2.显示法 3.隐式转化法 匿名对象 3.拷贝构造函数调用时机 4.构造函数调用规则 1.定义有参构造函数,不…

微信小程序之页面导航、生命周期和WXS脚本

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

机器学习的数据库积累........

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md ​​​​​​​ 另一个database:(网址:Object Detection Made Easy with TensorFlow Hub: Tutorial) Object Detection Made Easy with Ten…

【Java Kubernates】Java调用kubernates提交Yaml到SparkOperator

背景 目前查询框架使用的是trino,但是trino也有其局限性,需要准备一个备用的查询框架。考虑使用spark,spark operator也已经部署到k8s,现在需要定向提交spark sql到k8s的sparkoperator上,使用k8s资源执行sql。 对比 …