Python 爬取淘宝指定搜索商品评论 标题 销量 计算sign

在这里插入图片描述

只需要替换原来的Cookie和token即可使用,自动计算对应链接地址的sign直接使用即可。需要注意是一个账号爬取过多会有验证码

import json
import hashlib
import random
import timeimport pandas as pd
import requestsresults = []def fetch_review_list(datas, md5_hash,t):url = "https://h5api.m.tmall.com/h5/mtop.alibaba.review.list.for.new.pc.detail/1.0/"params = {"jsv": "2.7.2","appKey": "12574478","t": t,  # 使用当前时间戳"sign": md5_hash,  # 请替换为实际的签名值"api": "mtop.alibaba.review.list.for.new.pc.detail","v": "1.0","isSec": "0","ecode": "0","timeout": "20000","ttid": "2022@taobao_litepc_9.17.0","AntiFlood": "true","AntiCreep": "true","preventFallback": "true","type": "jsonp","dataType": "jsonp","callback": "mtopjsonp6","data": datas}# 设置 headersheaders = {"Cookie": "自己的""User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36","Referer": "https://detail.tmall.com/","Accept": "*/*","Connection": "keep-alive"}response = requests.get(url, params=params, headers=headers)print(response.text)json_content = json.loads(response.text.replace("mtopjsonp6(", "").replace("})", "}"))# 获取评论区counten = json_content['data']['module']['reviewVOList']rulist =[]for i in counten:pinglun = i['reviewWordContent']rulist.append(pinglun)return  rulistdef taobao(sign, datas, appkey, t,coci):# 构造 URL 和参数url = "https://h5api.m.taobao.com/h5/mtop.relationrecommend.wirelessrecommend.recommend/2.0/"params = {"jsv": "2.7.0","appKey": appkey,"t": t,"sign": sign,"api": "mtop.relationrecommend.WirelessRecommend.recommend","v": "2.0","H5Request": "true","preventFallback": "true","type": "jsonp","dataType": "jsonp","callback": "mtopjsonp2","data": datas}# 设置 headersheaders = {"Cookie": coci,"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","Referer": "https://h5.m.taobao.com/","Accept": "*/*","Connection": "keep-alive"}# 发起请求response = requests.get(url, headers=headers, params=params)# 确保请求成功if response.status_code == 200:content = response.text.replace("mtopjsonp2(", "").replace("})", "}")# 检查响应内容是否为空if content.strip():# 解析JSON字符串try:json_content = json.loads(content)# 获取指定的JSON内容name = json_content['data']['itemsArray']for list in range(len(name)):# 商品链接product_url = name[list]['auctionURL']pic_path = name[list]['pic_path']title = name[list]['title']print(title)price = name[list]['priceShow']['price']# 标签tag = name[list]['structuredShopInfo']['infoList'][0]['text']# 销量sales = name[list]['realSales']time.sleep(random.randint(1, 5))# 获取评论区# 商品idpl_id = name[list]['item_id']pl_token = "自己的token"pl_t = str(1718204461753)pl_appKey = "12574478"pl_data = '{"itemId":"' + str(pl_id) + '","bizCode":"ali.china.tmall","channel":"pc_detail","pageSize":20,"pageNum":1}'md5_hash = md5_encrypt(pl_token + "&" + pl_t + "&" + pl_appKey + "&" + pl_data)print("获取评论区")pinglunqu = fetch_review_list(pl_data, md5_hash,pl_t)results.append([pl_id,product_url, pic_path, title, price, tag, sales,pinglunqu])time.sleep( random.randint(1, 5))except json.JSONDecodeError as e:print(f"JSON解析错误: {e}")except KeyError as e:print(f"键错误: {e}")except IndexError as e:print(f"索引错误: {e}")else:print("响应内容为空")else:print(f"请求失败,状态码: {response.status_code}")def md5_encrypt(data):"""对给定的数据进行MD5加密"""md5_obj = hashlib.md5()md5_obj.update(data.encode('utf-8'))  # 确保数据是字节类型return md5_obj.hexdigest()  # 返回16进制格式的哈希值if __name__ == '__main__':keyword = "碎花裙"token = "自己的token"t = str(int(time.time() * 1000))appKey = "12574478"coci="自己的Cookie"for page in range(30, 50):data = '{"appId":"29859","params":"{\\"isBeta\\":\\"false\\",\\"grayHair\\":\\"false\\",\\"appId\\":\\"29859\\",\\"from\\":\\"\\",\\"brand\\":\\"HUAWEI\\",\\"info\\":\\"wifi\\",\\"index\\":\\"4\\",\\"ttid\\":\\"600000@taobao_android_10.7.0\\",\\"needTabs\\":\\"true\\",\\"rainbow\\":\\"\\",\\"areaCode\\":\\"CN\\",\\"vm\\":\\"nw\\",\\"schemaType\\":\\"auction\\",\\"elderHome\\":\\"false\\",\\"device\\":\\"HMA-AL00\\",\\"isEnterSrpSearch\\":\\"true\\",\\"newSearch\\":\\"false\\",\\"network\\":\\"wifi\\",\\"subtype\\":\\"\\",\\"hasPreposeFilter\\":\\"false\\",\\"client_os\\":\\"Android\\",\\"gpsEnabled\\":\\"false\\",\\"searchDoorFrom\\":\\"srp\\",\\"debug_rerankNewOpenCard\\":\\"false\\",\\"homePageVersion\\":\\"v7\\",\\"searchElderHomeOpen\\":\\"false\\",\\"style\\":\\"wf\\",\\"page\\":' + str(page) + ',\\"n\\":\\"10\\",\\"q\\":\\"' + keyword + '\\",\\"search_action\\":\\"initiative\\",\\"sugg\\":\\"_4_1\\",\\"m\\":\\"h5\\",\\"sversion\\":\\"13.6\\",\\"prepositionVersion\\":\\"v2\\",\\"tab\\":\\"all\\",\\"channelSrp\\":\\"\\",\\"tagSearchKeyword\\":null,\\"sort\\":\\"_sale\\",\\"filterTag\\":\\"\\",\\"prop\\":\\"\\",\\"item_id\\":\\"\\\"}"}'md5_hash = md5_encrypt(token + "&" + t + "&" + appKey + "&" + data)print(page)taobao(md5_hash, data, appKey, t,coci)df = pd.DataFrame(results, columns=['商品id','商品链接', '图片路径', '标题', '价格', '标签', '销量','用户评论'])df.to_excel('淘宝1.xlsx', index=False, engine='openpyxl')# 根据销量高的产品来获取他们的评论

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

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

相关文章

vuejs3+elementPlus后台管理系统,左侧菜单栏制作,跳转、默认激活菜单

默认激活菜单,效果&#xff1a; 默认激活菜单&#xff0c;效果1&#xff1a; 默认激活菜单&#xff0c;效果2&#xff1a; 跳转链接效果&#xff1a; 制作&#xff1a; <script setup> import {useUserStore} from "/stores/userStore.js"; import {ref} fr…

python实践笔记(二): 类和对象

1. 写在前面 最近在重构之前的后端代码&#xff0c;借着这个机会又重新补充了关于python的一些知识&#xff0c; 学习到了一些高效编写代码的方法和心得&#xff0c;比如构建大项目来讲&#xff0c;要明确捕捉异常机制的重要性&#xff0c; 学会使用try...except..finally&…

适配器模式(大话设计模式)C/C++版本

适配器模式 C #include <iostream> using namespace std; // 球员 class Player { protected:string name;public:Player(string name) : name(name) {}virtual void Attack() 0;virtual void Defense() 0;virtual ~Player() {} }; // 前锋 class Forwards : public P…

JAVA Thread.yield()方法(请求释放CPU)的理解及在ForkJoinPool中的使用

目录 线程释放资源的三种方法Object.wait()Thread.sleep()Thread.yield() Thread.yield()的特性使用Thread.yield()测试高负载场景下的多线程协作测试结果不调用yield()方法调用yield()方法 测试结论 Thread.yield()在ForkJoinPool中的应用ForkJoinPool的工作原理 线程释放资源…

Spring框架中哪些地方使用了反射

Spring框架中哪些地方使用了反射&#xff1f; 1. 依赖注入&#xff1a;Spring 使用反射机制获取对象并进行属性注入&#xff0c;从而实现依赖注入。 2. AOP&#xff1a;Spring AOP 使用 JDK 动态代理或者 CGLIB 字节码增强技术来实现 AOP 的切面逻辑&#xff0c;这其中就包含…

【无需任何插件】将VOS录音文件REC转MP3,REC转WAV或MP3的具体流程

【无需任何插件】将VOS录音文件REC转MP3&#xff0c;REC转WAV或MP3的具体流程&#xff0c;全过程完全复制本文命令即可&#xff0c;无需其他任何操作&#xff0c;命令长期有效&#xff0c;如失效&#xff0c;可以随时私信或者留言&#xff0c;免费更新。 __ 一位热爱鼓捣的IT爱…

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起&#xff0c;由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上&#xff0c;一切正常。 如果你单独使用核心板&#xff0c;很容易出现这个问题【省成本没有使用CC芯片】&#xff1a;不读U…

300PLC连接Modbus转Profibus网关与阀岛modbusRTU通讯

一、概况 300PLC作为常见的控制器设备&#xff0c;在与阀岛Modbus RTU通讯时&#xff0c;通常需要借助Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;来实现连接和数据交换。PLC通过Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;与阀岛Modbus RTU通讯是比…

labelme使用笔记:目标检测数据集标注和语义分割数据集批量生成

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中&#xff0c;集合是我们最常用的数据结构之一。为了方便我们操作集合&#xff0c;Google的Guava库提供了一个名为Lists的工具类&#xff0c;它封装了许多用于操作List对象的实用方法。在本文中&#xff0c;我们将详细介绍其常见的用法&#xff0c;以帮助您更好…

PyQt5 生成py文件不能运行;pushButton点击事件;QTextEdit 获取输入框内容

目录 cant open file c.pyuic: c.pyuic $FileName$ -o $FileNameWithoutExtension$.p PyQt5 生成py文件不能运行 pushButton点击事件 QTextEdit 获取输入框内容 整体运行代码: Creating a Qt Widget Based Application | Qt Creator Manual cant open file c.pyuic: c.…

NAT Easyip实验

我们这篇博客将重点讲述easy ip的配置&#xff1a; 以下面的一个简单的实验拓扑图为例&#xff1a; 本实验使用的网络地址&#xff1a; 1. 我们先来完成基础配置&#xff1a; 1.1AR1的基础配置&#xff1a; 1.2AR2上的基础配置 1.3完成AR1和AR2的基础配置后&#xff0c;我们…

数据库 | CSCI235/CSCI835 Database Systems Assignment 2

这个作业是完成与数据库事务的实现有关的任务 CSCI235/CSCI835 Database Systems Assignment 2 27 April 2020 Scope This assignment includes the tasks related to implementation of database transactions. The outcomes of the laboratory work are due by Saturday 16 M…

rust数据类型

目录 一&#xff0c;基本类型 1&#xff0c;基本类型 &#xff08;1&#xff09;整数类型 &#xff08;2&#xff09;浮点数 &#xff08;3&#xff09;bool类型 &#xff08;4&#xff09;char类型 2&#xff0c;基本类型的代数结构 二&#xff0c;复合类型 1&#x…

【信息学奥赛】CSP-J/S初赛04 进制转换相关问题(二、八、十六进制与十进制互相转换)

​ 大家好&#xff0c;我是bigbigli&#xff0c;今天我们学习初赛中常考的一个数学内容——进制转换 进制转换 常用的数制 权&#xff1a;数制中某一位上的1所表示的数值的大小&#xff0c;比如十进制中的123&#xff0c;1的位权是100,2的位权是10,3的位权是1。 进制基数基数…

这些帮助你成长的IOS应用,建议收藏

TrackIt TrackIt是一款功能丰富的任务清单、日程管理和习惯打卡应用&#xff0c;旨在帮助用户提高效率和专注力。通过这些功能&#xff0c;用户可以更好地规划时间和任务&#xff0c;从而实现个人目标和养成良好习惯。 在目标设定方面&#xff0c;SMART原则是一个常用的方法&a…

【决战欧洲之巅】丹麦 vs 英格兰战术分析和球员状态以及走地数据分析

丹麦 vs 英格兰战术分析和球员状态 阵型与战术 丹麦: 阵型:丹麦通常采用4-3-3阵型&#xff0c;以因防守为基础&#xff0c;同时通过快速反击等找机会。 ”战术: 防守:丹麦在防守时以紧密的四后卫体彩为核心&#xff0c;辅以中场球员的积极回防&#xff0c;形成稳因的防 线。…

解决HassOS无法获取ip地址问题

目录 问题描述解法 问题描述 在ESXi中安装完HassOS后&#xff0c;开机遇到一个无法获取ip地址的问题&#xff0c;如下图所示&#xff1a; 输入network info命令&#xff0c;显示ipv4已被禁用&#xff0c;如下图所示&#xff1a; 解法 在控制台ha >后输入下面命令 netw…

基于Java技术“漫画之家”系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构&#xff0c;SpringBoot框架 工具&#xff1a;MyEc…

使用Python写入Excel文件,设置列宽和行高

哈喽,大家好,我是木头左! Python与Excel的完美结合 在当今这个数据爆炸的时代,处理大量数据已经成为了日常工作的一部分。而Python作为一种功能强大、易于学习的编程语言,已经成为了数据处理的首选工具。那么,如何将Python与Excel结合起来,实现数据的高效处理呢?本文将…