【爬虫实战】利用代理爬取Temu电商数据
引言
在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而优化产品和服务,提高客户满意度和忠诚度。同时,数据采集可以实时跟踪库存水平和销售情况,帮助企业管理库存,减少库存成本和浪费,优化供应链,提高物流和配送效率。因此,数据采集对于跨境电商而言是至关重要的,可以帮助企业提高效率和盈利能力,获得竞争优势。
但现实中,数据采集可能会遇到多样化的数据来源、不统一的数据格式、庞大的数据量、数据质量和安全隐私问题等困难和挑战。为了应对这些挑战,可以采用旋转代理或IP池避免频繁请求同一IP地址、模拟用户行为(如随机请求间隔和动态内容处理),设置请求头使请求看起来更像真实浏览器、随机化请求参数、延时和限速策略、动态IP切换、模拟AJAX请求等方式。但这些方式都必须避免网站检测到请求来自同一台设备,这时就需要使用代理工具。
数据采集实战
这里我们尝试采集Temu电商网站数据。Temu是一个电商平台,它成立于2019年。Temu主要针对年轻消费者,提供各种时尚、潮流、品质优良的消费品,包括服饰、鞋类、家居用品、个护产品、运动健康用品等。Temu的特色之一是价格实惠,致力于为消费者提供高性价比的商品。由于Temu网站主要做跨境电商业务,所以网站有很多验证机制,大陆IP很容易连接不上网站。同时,网站也具有多纬度的爬虫检测机制。避免这些困难的一大方法就是使用代理服务。

云端配置
市面上能够解锁网络验证机制的代理工具很多,今天我们选用Proxy302这家代理服务。首先进入控制台页面,点击“动态IP”,然后选择“通用代理生成”,即可生成一条代理。如果需要指定某个区域IP的话,也可以通过地区代理生成实现。

生成完毕后在“已购代理”中即可找到代理。其中代理地址、端口、用户名、密码均在第一格显示,最后一格中可以开关代理,到这里我们就可以开始使用代理。
远程PC
有些同学可能希望有一个更为直观的可视化使用环境,可以配置一台远程电脑实现。使用方法也很简单,首先要先配置一下连接工具。点击“连接工具”,选择想要的远程PC区域和配置即可创建。创建好之后在下方可以找到远程PC的用户名和密码。

之后点击“远程控制”,即可在网页端控制远程PC并连接到代理。

输入用户名和密码即可连接上。

等待2-3分钟,就可以加载到系统中。可以看到它就是一台云电脑,可以按照自己喜欢的方式来操作和访问代理服务器。

数据采集
在采集数据之前,我们先观察一下网页结构。使用开发者工具可以看到,商品名和价格位于一个div下的两个不同div之中。通过aria-label属性可以轻松定位到两个数据。

基于以上分析,我们可以编写一个Python爬虫来抓取这几处的商品信息。首先我们需要编辑请求头,使得网站认为我们是一个用户而非程序。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
之后按照我们在网页中配置的数据配置代理。按照url形式填入我们的代理地址、端口、用户名、密码,并将其放置在一个字典中。
host = 'proxy.proxy302.com:2222'
user_name = 'maNwkWj2S'
password = 'tIegn05sPzyLdl0m'
proxy_url = f'http://{user_name}:{password}@{host}'
proxies = {
'http': proxy_url}
之后我们使用requests包通过配置好的代理发送请求,并获得网页。
response = requests.get(url, headers=headers, proxies=proxies)
html_str = response.text
return html_str
再之后我们就可以按照分析抓取商品信息。这里们选用xpath的方式,按照层级选中目标,之后保存在一个字典中。
html_data = etree.HTML(html_str)li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')for li in li_list:title = li.xpath('.//a[@class="pic"]/@title')title = ''.join(title)goods_url = 'https:' + li.xpath('.//a[@class="pic"]/@href')[0]price = li.xpath('.//p[@class="price"]/span[@class="price_n"]/text()')[0]print(price)pre_price = li.xpath('.//p[@class="price"]/span[@class="price_r"]/text()')[0]img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]print({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,'图片链接': img_url})data_list.append({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,'图片链接': img_url})
最后,我们将获取到的数据写入到本地文件中。
df = pd.DataFrame(data_list)
df.drop_duplicates()
df.to_excel('电商采集数据集.xlsx')
最后通过主函数,将网址和查询关键词发送到函数中,之后让我们运行一下。

可以看到程序正常运行。打开生成的文件可以看到最终的结果。

完整代码如下:
import pandas as pd # pandas,用于写入Excel文件
import requests # python基础爬虫库
from lxml import etree # 可以将网页转换为Elements对象
import time # 防止爬取过快可以睡眠一秒host = 'proxy.proxy302.com:2222'
user_name = 'maNwkWj2S'
password = 'tIegn05sPzyLdl0m' proxy_url = f'http://{user_name}:{password}@{host}'
proxies = {'http': proxy_url,}def get_html_str(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36','cookie': 'dest_area=country_id%3D9000%26province_id%3D111%26city_id%3D0%26district_id%3D0%26town_id%3D0; __permanent_id=20240526224738315295956158315909549; ddscreen=2; __dd_token_id=202104062202466363669562232a8cdf; search_passback=51a9db4eecb3b24ff6ab7766fc010000fbbbca00dcab7766; pos_6_start=1716734858859; pos_6_end=1716734858807; deal_token=1576b51797067261d98918f7285bd6495f87d87938a72c8849da21f5acf064403857abf3742ed1c739; login_dang_code=202103291113455962963369449d079d; bind_custid=106901607; __visit_id=20240623125745069259408506015858558; __out_refer=1719118665%7C!%7Cwww.baidu.com%7C!%7C; __trace_id=20240623125804232373763612518646769; __rpm=s_112100...1719118830586%7Clogin_page...1719118833969; sessionID=pc_4012ba7c7eaa04527a44c2379c16b0c6164ad4d2625cd18cfe1c7acbf03f1be0; USERNUM=8Y+5nq8RumeCtfoBrVftkA==; login.dangdang.com=.ASPXAUTH=qFvA8gjuJvlbZfleoWsswUEz1frglA5/; dangdang.com=email=bWF3ZW5jYWkxOTk0QDE2My5jb20=&nickname=&display_id=9562776931392&customerid=kVr1TGEUb6ByKz6allcKDQ==&viptype=04VLqcFOuaQ=&show_name=156****4818; ddoy=email=mawencai1994@163.com&nickname=&validatedflag=2&uname=mawencai1994%40163.com&utype=0&.ALFG=off&.ALTM=1719118838363; LOGIN_TIME=1719118839620'}response = requests.get(url, headers=headers, proxies=proxies)html_str = response.textreturn html_strdef get_data(html_str, page, data_list):html_data = etree.HTML(html_str)li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')for li in li_list:title = li.xpath('.//a[@class="pic"]/@title')title = ''.join(title)goods_url = 'https:' + li.xpath('.//a[@class="pic"]/@href')[0]price = li.xpath('.//p[@class="price"]/span[@class="price_n"]/text()')[0]print(price)pre_price = li.xpath('.//p[@class="price"]/span[@class="price_r"]/text()')[0]img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]print({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,'图片链接': img_url})data_list.append({'页码': page, '标题': title, '价格': price, '定价': pre_price, '商品链接': goods_url,'图片链接': img_url})def to_excel(data_list):df = pd.DataFrame(data_list)df.drop_duplicates()df.to_excel('电商采集数据集.xlsx')
def main():print('开始作业')keyword = '手机'page_num = 1data_list = []for page in range(1, page_num + 1):url = f'https://www.temu.com/search_result.html?search_key={keyword}&search_method=user&refer_page_el_sn=200010&srch_enter_source=top_search_entrance_10005&refer_page_name=home&refer_page_id=10005_1722768505220_nkdyrd23tn&refer_page_sn=10005&_x_sessn_id=iq9v42rvzn'html_str = get_html_str(url)get_data(html_str, page, data_list)time.sleep(1)to_excel(data_list)if __name__ == '__main__':main()print('抓取成功!')
AI助手
对于编程困难的同学,可以尝试使用Proxy302家的AI集成平台302.AI。它集合了市面上主流的AI工具,采用量贩化结算方式,在一个平台中自定义满足所有需求。注册登录之后,在控制面板左侧即可根据需求定制AI工具,之后即可按照实际流量计费使用,非常的方便快捷!由于都是Proxy302家的产品,所以余额也是共享的。通过它也可以辅助我们生成爬虫代码,快速获取数据。

总结
通过上面的实战,我们可以看到代理服务可以大大提高爬虫的匿名性和效率。Proxy302的代理可以满足这两点需求。
Proxy302提供动态IP和静态住宅IP两种代理。动态IP具备智能切换功能,可以自动更换代理IP,模拟真实用户行为,进一步降低被检测到的风险。同时根据业务需求,静态IP能够提供高稳定性和快速响应速度,确保数据采集的连续性和效率,不会因代理不稳定而中断。这些IP都具有高级别的匿名性,确保用户的真实IP地址不被暴露,保护隐私并避免被网站封禁,同时用户可以根据需求选择特定地区的代理IP,以适应区域特殊需求。
这些优势使得Proxy302能够为电商平台爬虫的实现提供了强有力的支持。
无论是匿名性、安全性还是效率,Proxy302都提供了丰富的功能和优质的用户体验,是企业和个人在数据采集领域的理想选择。数据采集对工具的需求十分苛刻,Proxy302的功能其实远不止这些,欢迎各位私信博主,跟我一起继续探讨。
相关文章:
【爬虫实战】利用代理爬取Temu电商数据
引言 在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而优化产品和服务,提高客户满意度和忠诚度。同时,数据采集可以实时跟踪库存水平和销售情况&…...
【MATLAB源码-第244期】基于MATLAB的BP神经网络语音特征信号分类,输出原信号与预测信号对比图以及预测误差和正确率。
操作环境: MATLAB 2022a 1、算法描述 BP神经网络(Back Propagation Neural Network)是一种广泛应用于模式识别和分类问题的人工神经网络。在本次语音特征信号分类任务中,我们将详细描述如何通过BP神经网络实现对四类语音信号的…...
HarmonyOS 习题(二)
1、在类Web开发范式自定义组件创建后,加入到Page组件树时,会触发以下哪一项回调。 A)Onlnit B)OnAttached C)OnLayoutReady D)OnDetached 答案:B 分析: onlnit:自定义组件初始化生命周期回调&a…...
如何搭建一个圈子社区系统?开源社交陪玩交友圈子论坛帖子系统保姆级搭建教程!
整体部署流程如下: 1.获取源码/前后端分离,前端Uniapp vue2.0 后端thinkphp6(Gitee直达) 2.服务器安装宝塔(已有宝塔请安装环境,Nginx或者Apache/ php 7.3/ mysql 5.6 ) 3.进入宝塔添加网站&…...
Delphi5实现身份证检验(DLL版)
效果图 身份证行政区划分代码 识别归属地需要行政区划分,都在data.txt文档里面了。 最后一位校验码 根据上面的原理编写程序即可。 {这个函数计算最后一位检验码是否正确,ID是18位身份证号字符串,结果返回字符串} function IDcheck(ID:stri…...
linux下的C++程序
1.安装g编译环境(c)、gcc编译环境(c语言) sudo yum install gcc或者gcc-c //安装gcc/g编译(用管理员权限弄) 验证是否安装成功 gcc或者g --version //如果显示版本号,则表示安装成功 sudo yum remove g…...
selfAttention 中的dk到底是什么
在Self-Attention机制中,为什么需要对 Q K T QK^T QKT 的结果进行缩放,除以 d k \sqrt{d_k} dk 。以下是详细解释: 缩放的原因 除以 d k \sqrt{d_k} dk 的原因有两个: 防止输入过大:如果不缩放…...
安装MongoDB UI客户端工具:mongodb-compass-1.40.2-win32-x64.msi
文章目录 1、安装 mongodb-compass-1.40.2-win32-x64.msi2、安装后配置链接地址: 1、安装 mongodb-compass-1.40.2-win32-x64.msi 2、安装后配置链接地址:...
一行命令搞定内网穿透
一行命令搞定内网穿透 一款开源免费的内网穿透工具:localtunnel ,基于 nodejs 实现,无需修改 DNS 和防火墙设置,方便快捷的将内网服务暴露到外网,为开发人员、测试人员以及需要分享本地项目的人提供实时的公网访问方式…...
C语言——扫雷游戏
扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要…...
【LLM】-16-评估LLM-与标准答案的差距
目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案,只要能制定一个评估标准,就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...
WeNet 2.0:更高效的端到端语音识别工具包
WeNet 2.0:更高效的端到端语音识别工具包 原文链接:[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包,WeNet 2.0在此基础上进行了四项主要更新,…...
阿里大模型调用 = 》通义千问大语言模型
背景:简单的通过API或者SDK在线调用阿里云大模型(基于百炼平台),基于在线知识库 参考地址:安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...
idea使用free流程,2024idea免费使用
1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...
算法_链表专题---持续更新
文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解,包含题目有&a…...
在Windows MFC\C++编程中,如何使用OnCopyData函数
在C中,OnCopyData 函数通常不是标准C库的一部分,而是与特定的图形用户界面(GUI)框架相关联,如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中,OnCopyData 是用于处理来自其他应…...
【Qt】项目代码
main.cpp文件 argc:命令行参数个数。*argv[ ]:每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序,一定需要QApplication对象。 widget w; 在创建项目的时候,勾选widg…...
MySQL中常用工具
MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件,不能导入sql文件...
关于儿童编程语言
青少年通常会通过Scratch或Python开始学习编程。在这两种语言中,代码的编写(或者在Scratch中是构建)方式类似于英语,这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...
[io]进程间通信 -信号函数 —信号处理过程
sighandler_t signal(int signum, sighandler_t handler); 功能: 信号处理函数 参数: signum:要处理的信号 handler:信号处理方式 SIG_IGN:忽略信号 SIG_DFL:执行默认操作 handler:捕捉信 …...
STM32F103 OTA升级实战:用bsdiff差分算法把固件包缩小90%(附完整工具链)
STM32F103 OTA升级实战:用bsdiff差分算法把固件包缩小90%(附完整工具链) 在物联网设备快速迭代的今天,OTA(Over-The-Air)升级已成为嵌入式开发的标配功能。但对于资源受限的STM32F103这类Cortex-M3内核MCU来…...
不止是安装:在openEuler 22.03 LTS SP4上快速搭一个可用的开发/测试环境
从裸机到生产力:openEuler 22.03 LTS SP4半小时高效开发环境搭建指南 刚装完openEuler系统,看着空荡荡的终端界面,是不是有种"接下来该干嘛"的迷茫?作为开发者,我们需要的不是一个干净的操作系统,…...
从电解到瓷片:不同材质去耦电容在电路设计中的最佳应用场景对比
从电解到瓷片:不同材质去耦电容在电路设计中的最佳应用场景对比 当你在设计一块电路板时,是否曾经为电源引脚旁那个小小的电容而犹豫不决?是选择便宜的电解电容,还是性能稳定的瓷片电容,亦或是价格不菲的钽电容&#x…...
手把手教你实现西门子1200自动洗车博途仿真 自动洗车博图PLC程序洗车机控制HMI组态
西门子1200自动洗车博途仿真 自动洗车博图PLC程序洗车机控制HMI组态 、商品包含内容:①三种液体博途PLC与HMI仿真工程?(博途V14或以上) 一份;②三种液体配套有IO点表PLC接线图主电路图控制流程图 (CAD源文件可编辑);③三种液体博途仿真工程配套视频讲解…...
单片机IO口扩展方案全解析与应用实践
1. 单片机IO口扩展的必要性与挑战作为一名在嵌入式领域摸爬滚打多年的工程师,我经常遇到这样的场景:项目进行到一半,突然发现单片机GPIO口不够用了。这种"资源危机"在中小型项目中尤为常见,特别是当我们使用8位或低引脚…...
Qt Modbus 报文构建实战:QModbusRequest构造与sendRawRequest发送详解
1. Qt Modbus开发环境搭建与基础概念 在工业自动化领域,Modbus协议就像设备之间的"普通话",而Qt Modbus库则是我们与设备对话的翻译器。我刚开始接触这个领域时,花了一整天时间才搞明白如何正确发送一个简单的控制指令。下面分享我…...
einops.reduce隐藏技巧:3行代码实现CNN池化层效果(对比MaxPool2d性能)
einops.reduce隐藏技巧:3行代码实现CNN池化层效果(对比MaxPool2d性能) 在计算机视觉模型的优化过程中,池化层一直扮演着至关重要的角色。传统的MaxPool2d虽然高效,但在某些场景下显得过于刚性。最近在重构一个轻量级图…...
基于深度学习的轴承故障诊断:CNN-LSTM架构演进与核心代码逻辑拆解
基于深度学习的轴承故障诊断:CNN-LSTM架构演进与核心代码逻辑拆解前言 在设备健康管理(PHM)的实战中,面对凯斯西储大学(CWRU)轴承数据集,直接将几十万个采样点的振动信号塞给模型是行不通的。即…...
从MATLAB R2022b升级到R2024a,我的Python脚本为啥跑不起来了?
从MATLAB R2022b升级到R2024a:Python混合编程兼容性危机与系统化解决方案 上周三凌晨两点,当我在服务器上完成MATLAB R2024a的升级部署后,原本稳定运行的数据分析流水线突然崩溃——那些精心编写的Python-MATLAB混合脚本像多米诺骨牌一样接连…...
从Revit/BIM到Cesium:CesiumLab 4.0.7插件全流程打通,属性信息一个不丢
从Revit到Cesium的无损数据迁移:CesiumLab 4.0.7全流程深度解析 1. BIM与三维GIS融合的技术演进 在建筑信息模型(BIM)与地理信息系统(GIS)的交叉领域,数据互操作性一直是行业痛点。传统工作流中,…...
