使用Python爬取temu商品与评论信息

news2025/1/31 22:36:49

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  电商系列有多难,做过的小伙伴应该都非常的清楚!其中解决算法只是入场券,核心难点当然是风控系统!作者虽没有实际的业务场景,但是在研究分析与测试的过程中能够感受到强度!尤其是在对IP、账号、行为的硬控堪称为精准


分析目标

aHR0cHM6Ly93d3cudGVtdS5jb20vYmdjX2NvbW1lbnRzLmh0bWw/Z29vZHNfaWQ9NjAxMDk5NTEyMzAyNTk5Jm1hbGxfaWQ9NTAyNjE0Njg3NiZfeF9zZXNzbl9pZD0zdGF0cTA5d202JnJlZmVyX3BhZ2VfbmFtZT1nb29kcyZyZWZlcl9wYWdlX2lkPTEwMDMyXzE3MTc4MjMxMDk4NzFfeGNwc254Zng2bSZyZWZlcl9wYWdlX3NuPTEwMDMy

2. 接口分析

首先在打开网站的第一步,需要准备一个优质的IP环境,已保障网络是可以正常访问的。不然的话就会出现下面这样的情况,如下所示:

在这里插入图片描述

直接看头部参数,还是这个Anti-Content,目前作者分析大部分还有有区别的,但是一个站点基本是通用的。区别就在于是否含轨迹参与了加密,如下所示:

在这里插入图片描述

这个验证码虽然说出的不是很频繁,但是在持续抓取的道路上一定是一道坎!如下所示:

在这里插入图片描述

这里的也是一个坑,由于作者前期是采用的登录方式去调试的。导致算法没有扣全(但是能用)就去尝试抓取测试,导致账号被风控后所有页面的内容被限制浏览!如下所示:

在这里插入图片描述

3. 数据爬取

temu的网站其实从分析到扣JS算法,跟作者之前分析过的达人端流程相差无几达人端是700多位含轨迹。接下来直接搜索关键词参数,断点跟进,如下所示:

在这里插入图片描述

这里有一个关键的环境点需要补,就是referer。完整的环境头可以直接拿去使用,如下所示:

(function(global, cookie, href, ua) {
    const random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);

    const eventMap = new Map();

    class DeviceMotionEvent {}
    class DeviceOrientationEvent {}

    const documentMock = {
        cookie: cookie,
        onmousewheel: "",
        get referrer() {
            return "";
        },
        addEventListener: (e, t) => eventMap.set(e, t),
        getElementById: () => {},
        get ontouchstart() {
            return null;
        },
        get documentElement() {
            return { scrollTop: 12 };
        }
    };

    const historyMock = {
        back: () => {},
        toString: () => "function back() { [native code] }"
    };

    const localStorageMock = {
        getItem: () => null,
        setItem: () => {}
    };

    const locationMock = {
        get href() {
            return href;
        },
        get port() {
            return "";
        }
    };

    const navigatorMock = {
        hasOwnProperty: () => false,
        get languages() {
            return ["zh-CN", "zh"];
        },
        get plugins() {
            return { length: 4 };
        },
        get userAgent() {
            return ua;
        }
    };

    const screenMock = {
        get availHeight() {
            return 1040;
        },
        get availWidth() {
            return 1920;
        }
    };

    global._event_map = eventMap;
    global.DeviceMotionEvent = DeviceMotionEvent;
    global.DeviceOrientationEvent = DeviceOrientationEvent;
    global.chrome = {};
    global.document = documentMock;
    global.history = historyMock;
    global.localStorage = localStorageMock;
    global.location = locationMock;
    global.navigator = navigatorMock;
    global.outerHeight = 1040;
    global.outerWidth = 1920;
    global.screen = screenMock;

    global.history.back.toString = historyMock.toString;
    global.document.getElementById.toString = () => "native code";

})(typeof window !== "undefined" ? window : global, "{cookie}", "{href}", "{ua}");

这里JS内参数Cookie、UA、Referer采用的动态替换的方式调用传递,这样的方式更加的便捷,在Python程序中代码如何去实现?如下所示:

import execjs

# 调用JS算法示例
def generate_anti_content(cookie_str, referer, user_agent):
    try:
        with open("anti_content_temu.js", "rb") as f:
            js_code = f.read()
        node = execjs.get()
        js_code = js_code.decode("gbk", 'ignore').replace("{cookie}", cookie_str).replace("{href}", referer).replace("{ua}", user_agent)
        if cookie_str not in js_code or user_agent not in js_code:
            raise Exception("未替换成功")
        ctx = node.compile(js_code)
        return ctx.call('get_anti_content')
    except Exception as e:
        logger.error(f"生成Anti-Content失败: {e}")
        raise

目前的话我们在抓取的时候是可以不需要去登录账号的,这就很友好了。我们在控制台将Cookie信息拿出来即可,因为Cookie信息也是需要参与加密的,如下所示:

在这里插入图片描述

算法如果有问题的话在请求的时候会得到下面的错误反馈,如下所示:

{'success': False, 'error_code': 40002, 'error_msg': 'System busy! '}

还有一种情况则是账号或者参数出现风控或异常,则会出现下面的错误反馈,如下所示:

{'error_code': 406008, 'error_msg': ''}

最后,测试一下扣出来的最终算法,可以看到加上轨迹验证与核心参数之后的长度在500+,基本上就是正确的了!商品评论详情抓取测试效果如下所示:

在这里插入图片描述

JS算法的话在每一次请求都调用生成最新的。切记生成一次多次去使用!最后,作者也是测试了一下商品的评价分类,如下所示:

在这里插入图片描述

经过了十多分钟控制策略的测试,发现还是非常稳定的。未出现验证,因为咱们使用的Cookie本身就是非登录的,主要就是测试验证码弹出的风控或者强制要求登录等问题!作者也是顺带着验证了一下商品信息与搜索均是没有问题的,证明所有的接口Anti-Content的算法是通用的~~

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

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

相关文章

javaWeb项目-ssm+vue网上租车系统功能介绍

本项目源码:java-基于ssmvue的网上租车系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、…

系统运维联盟 5 月会议召开,围绕“进展、规划与合作”展开讨论

2024 年 5 月 28 日,龙蜥社区系统运维联盟(SOMA,以下简称“运维联盟”)月度会议于线上召开,12 家运维联盟单位、 20 位代表出席,缺席 1 家。本次会议由龙蜥社区运营委员会副主席、运维联盟秘书处负责人金美…

openh264 编码器源码分析:AnalyzePictureComplexity 函数

介绍 文件位置: openh264/codec/processing/src/complexityanalysis/ComplexityAnalysis.cpp 功能: 作为CWelsPreProcess类中一个方法,用来分析当前图像与参考图像之间的复杂度关系,以便编码策略。 原型: void CWels…

为什么要学习Flink系统管理及优化课程?

Flink系统是一种流式处理框架,能够高效地处理大规模数据流。然而,要确保Flink系统的正常运行,就需要进行系统管理和优化。系统管理是指对Flink集群的监控、调度和维护,而系统优化则是指通过调整参数和优化算法,提高Fli…

Class-Aware Self-Distillation for Remote SensingImage Scene Classification

这篇文章提出了一种新的蒸馏方式,由于遥感场景图像具有类间相似性和类内多样性的特点,这篇文章试图解决这个问题。通过三个共享权重的分支,同时输入三张图片,其中两张类别相同的图片,一张类别不同但地物特征相似的图片…

Go变量作用域精讲及代码实战

1. 变量的作用域概述 在编程中,变量的作用域(Scope)定义了变量在程序中的可见性和生命周期。理解变量的作用域对于编写健壮且可维护的代码至关重要。Go语言(简称Go)提供了几种不同的作用域类型,使得开发者可…

腾讯云SSL证书获取及Nginx配置教程

前言 很多人应该都有属于自己网站,刚开始基本是只能用http进行访问,无法使用https安全访问,但是随着网络安全意识的不断提高,越来越多的网站开始使用HTTPS协议来保护用户的数据安全,SSL证书是实现HTTPS协议的关键组件,本文将讲解如何在腾讯云上获取SSL证书,并配置到Ngi…

为什么要做数字化转型?数字化转型对企业的意义?

本人研究企业数字化转型9年多,为企业软件选型、数字化提供咨询服务!目前重点研究低代码数字化转型玩法,力争为各行各业探索出一条最具性价比的数字化方式。 【织信低代码】数字化系统一体化的定制开发工具。 什么是数字化转型,为什…

【教程】从0开始搭建大语言模型:实现Attention机制

从0开始搭建大语言模型 从0开始搭建大语言模型:实现Attention机制建模长序列存在的问题使用attention机制获得数据间的依赖Self-attention介绍带有可训练权重的self-attention1.生成Q,K,V变量2.计算attention score3.attention weight的获得4…

《网络反不正当竞争规定》9月1日实施,这两类欺诈被重点关注

近日,国家市场监督管理总局公布《网络反不正当竞争暂行规定》 ,自2024年9月1日起施行。《网络反不正当竞争暂行规定》是为预防和制止网络不正当竞争行为,维护公平竞争的市场秩序,鼓励创新,保护经营者和消费者的合法权益…

【Unity】Inspector排版扩展学习初探

一、简单的Unity Inspector扩展 [SerializeField] [SerializeField] 作用:让private属性也可以显示在面板上 [Range(x , y)] [Range(x , y)] 作用: 让参数从输入框变为范围滑条 [Header(" 标题 ")] [Header(" 标题 ")]作用&am…

基于YOLOv8的行人检测项目的实现

YOLOv8简介 YOLOv8是YOLO系列的最新版本,在继承YOLOv7的基础上进行了进一步改进。YOLOv8在网络结构、损失函数和训练策略上都有显著的提升,使其在目标检测任务中表现更加出色。各位只需要记住,做目标检测,无脑选V8就完了。YOLOv8…

游戏本地化:如何选择本地化程序

游戏开发商可能很难确定游戏应该翻译成哪些语言,如何选择本地化程序,以及在为新市场本地化游戏时应该考虑哪些细微差别。Logrus IT游戏本地化客户经理Valentina Chernova在接受RMAA Games采访时回答了这些问题和其他问题。 现在哪些本地化语言最受外国开…

Faiss assertion ‘err == cudaSuccess‘ failed in void faiss::gpu:runL2Norm()

Faiss assertion ‘err cudaSuccess’ failed in void faiss::gpu:runL2Norm(). details:CUA error 209 no kernel image is available for execution on the device 本人使用的ubuntu 22.04系统,conda的环境。使用pip安装faiss-gpu出现的问题。 pip install fai…

SOLIDWORKS学生支持 可访问各种产品资源

你是不是一个热爱设计、追求创新的学生?你是不是在寻找一款能够帮助你实现设计梦想的工具?那么,SolidWorks学生支持是你的首要选择! SOLIDWORKS作为三维CAD设计软件,一直致力于为广大学生提供全方面的支持。无论你是初…

在windows下安装docker-desktop

Docker Desktop是一个在Windows和macOS上运行的应用程序,能够让开发者使用Docker容器技术。它包括了Docker Engine、Docker CLI客户端、Docker Compose、Docker Content Trust、Kubernetes和Credential Helper等。下面是一篇详细的指南,帮助你在Windows上…

【Python/Pytorch - 网络模型】-- 手把手搭建3D U-Net模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的3D UNet代码02 论文下载 00 写在前面 通过3D U-Net代码学习,可以学习基于Pytorch的网络结构模块化编程,对于后续学习其他更复杂3D网络模型,有很大的帮助作用。 在01中,可以根…

C#——方法函数详情

方法(函数) C#是面向对象的,所以C#中的方法也是相对于对象来说的,是指某个对象的行为,比如,有一个动物的类,兔子是这个动物类里的一个对象,那么跳这个行为就是兔子这个对象的方法了.其实也就是C中的函数(C是面向过程的,叫函数). 方法: 就是把一系列相关的代码组织到一块 用于…

优化Elasticsearch搜索性能:查询调优与索引设计

在构建基于 Elasticsearch 的搜索解决方案时,性能优化是关键。本文将深入探讨如何通过查询调优和索引设计来优化 Elasticsearch 的搜索性能,从而提高用户体验和系统效率。 查询调优 优化查询是提高 Elasticsearch 性能的重要方法。以下是一些有效的查询…

运筹学基础与应用(简洁版总复习)

第一章 线性规划及单纯形法 图解法 单纯形法 大m法 看案例(综合题) 化标准形式 目标函数的转换 min z变为max z 变量的变换 变量取值无约束 约束方程的转换 ≤:加一个松弛变量 ≥:减一个剩余变量 变量符号≤0的变换 保持变量≥…