【爬虫实战】利用代理爬取电商数据
文章目录
- 前言
- 工具介绍
- 实战获取网站数据
- 编写代码
- 数据展示
- 推荐
- 总结
前言
当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化,电商不仅从简单的在线购物演变为综合性的购物生态系统,还融合了人工智能、大数据和云计算等先进技术。平台通过精准的用户数据分析,提供个性化的购物体验,优化了商品推荐和服务,显著提升了用户满意度和忠诚度。
在这一过程中,爬虫技术扮演了至关重要的角色。通过自动化的数据抓取,爬虫可以高效地收集竞争对手的产品信息、价格变动和市场趋势,为商家提供宝贵的市场洞察。它不仅帮助商家进行实时的价格调整和库存优化,还支持更精确的市场分析和风险预警,使电商平台在竞争激烈的环境中保持领先地位。
工具介绍
工欲善其事必先利其器。今天给大家推荐的是Proxy302,它是一个专业的全球代理IP
采购平台,提供按需付费的充值方式、最全面的代理类型以及简洁高效的用户界面。我们来展开描述下他的特色。
- 按需付费,无月付套餐:无需套餐捆绑购买,按需付费,充值即可使用所有类型的
代理IP
,无阶梯式定价。 - 最全面
代理
类型:Proxy302提供市面上最全面的代理类型,满足各种业务需求。 -
- 全球240+国家和地区,6500万个
住宅IP
可供选择。
- 全球240+国家和地区,6500万个
-
- Proxy302支持HTTP、SOCKS5网络协议的代理。
-
- Proxy302支持
动态、静态代理
,代理类型分为【动态按流量扣费】
、【动态按IP扣费】
、【静态按流量扣费】
、【静态按IP扣费】
,静态代理还分为住宅IP
、数据中心IP
。
- Proxy302支持
- 简洁易用:用户界面简洁而不简单,易用且高效。提供浏览器扩展插件,实现一键设置代理,省去复杂配置步骤。
福利:点击右上角的调查问卷即可马上获取
$1
测试额度。
实战获取网站数据
这次我们要抓取的是某个知名的购书网站,内容包括:标题、链接、价格和图片链接。为了避免被检测为爬虫,我们首先需要获取登录用户的cookie。登录后,按下F12键,进入“网络”选项,选择任意一个流量记录,在请求头中找到cookie并复制下来。
然后,我们需要分析一下搜索框搜索“华为手机”之后的请求路径。可以从下图中看到,我们点击搜索之后,请求URL为https://search.dangdang.com/?key=%BB%AA%CE%AA%CA%D6%BB%FA&act=input&page_index=1,其中key为“华为手机”的转码,act为动作,page_index代表当前页是第一页。
接着我们需要确认商品元素在页面中的结构。可以观察到,所有商品都位于一个<ul>
标签中,每个商品对应一个<li>
标签,并且都有相应的class标记。
具体来说,标题位于<p>
标签的title属性中,链接在<a>
标签的href属性里,图片链接位于下层的<img>
标签中,价格则位于另一个<p>
标签中。接下来,我们将使用XPath来定位这些标签。
首先我们打开【帮助中心】
点击【快速入门】下的【查看更多】按钮
我们可以看到【非海外环境如何使用代理?】的标题,通过该内容我们了解到有4种实现海外环境的方式。此处阿Q选择使用VPN
的方式进行,简单有效。
选择【静态IP】下的【按IP扣费】选项,选择【购买天数】和【国家】之后点击【生成】按钮即可获取到静态住宅IP。
出现下图即表示获取静态IP成功。
编写代码
拿到静态ip之后我们需要定义 get_html_str 函数,来向电商网站发送搜索请求:先定义请求头,模拟浏览器访问,其中包含了一些cookie信息。然后配置我们的代理信息,包含我们拿到的静态代理IP。最后发送HTTP请求到指定的URL,并返回网页源码。
# 发送请求,获取网页源码
def get_html_str(url):# 请求头模拟浏览器(注意这里一定添加自己已经登录的cookie才可以)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': ''}# 添加代理IP,此处是我们刚拿到的静态代理ipproxies = "";# proxies = {}# 添加请求头和代理IP发送请求response = requests.get(url, headers=headers, proxies=proxies)# 获取网页源码html_str = response.text# 返回网页源码return html_str
接着我们定义 get_data 函数,来解析网页中的元素,找到目标文本:首先接收网页源码、页码和数据列表作为参数。然后使用lxml.etree解析网页源码,提取商品信息,包括标题、价格、商品链接和图片链接。最后将提取的数据添加到数据列表中。
# 提取数据写入列表
def get_data(html_str, page, data_list):# 将html字符串转换为etree对象方便后面使用xpath进行解析html_data = etree.HTML(html_str)# 利用xpath取到所有的li标签li_list = html_data.xpath('//div[@dd_name="普通商品区域"]/ul/li')# 遍历li_list列表取到某一个商品的对象标签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)# 图片链接img_url = 'https:' + li.xpath('.//a[@class="pic"]/img/@src')[0]print({'页码': page, '标题': title, '价格': price, '商品链接': goods_url,'图片链接': img_url})data_list.append({'页码': page, '标题': title, '价格': price, '商品链接': goods_url,'图片链接': img_url})
接下来定义 to_excel 函数,将获取到的结果保存为excel文件:首先将数据列表转换为pandas的DataFrame对象。然后删除DataFrame中的重复数据。最后将DataFrame保存为Excel文件。
# 写入Excel
def to_excel(data_list):df = pd.DataFrame(data_list)df.drop_duplicates() # 删除重复数据df.to_excel('当当采集数据集.xlsx')
最后定义一个main函数方便调节参数、控制流程:首先设置爬取的关键词和页数。然后初始化一个空的数据列表。之后循环遍历每一页,调用get_html_str和get_data函数获取数据。最后调用to_excel函数将数据写入Excel文件。
def main():# 1. 设置爬取的关键词和页数keyword = '华为手机'page_num = 1 # 爬取的页数data_list = [] # 空列表用于存储数据for page in range(1, page_num + 1):url = f'https://search.dangdang.com/?key={keyword}&act=input&page_index={page}'print(url)# 2. 获取指定页的网页源码html_str = get_html_str(url)# 3. 提取数据get_data(html_str, page, data_list)time.sleep(1)# 4. 写入Excelto_excel(data_list)
数据展示
以下是我们采集到的华为手机数据
推荐
值得注意的是Proxy302与302.AI是同一个开发团队,302.AI是一个汇集全球顶级品牌的AI超市,按需付费,无月费,全面开放使用各种类型AI。大家有需要可以自行体验!
总结
通过上面的实战,我们可以看到代理服务可以大大提高爬虫的匿名性和效率。Proxy302的代理可以满足这两点需求。
对开发者而言,Proxy302代理以其简单易用的特性,大幅降低了技术门槛。 开发者可以快速上手,无需深入了解代理服务的底层技术细节,即可实现高效的数据抓取。这不仅加快了开发进程,也使得开发者能够将更多精力投入到数据分析和业务逻辑的构建上。
Proxy302以其多维度的优势,为电商平台爬虫的实现提供了强有力的支持。无论是技术实现的便捷性,还是成本控制的灵活性,或是数据质量的高效性,以及整体操作的安全性,亮数据代理都是企业和个人在数据采集领域的理想选择。随着技术的不断进步和市场需求的日益增长,我们可以预见,代理服务将在电商数据采集领域扮演越来越重要的角色。
相关文章:

【爬虫实战】利用代理爬取电商数据
文章目录 前言工具介绍实战获取网站数据编写代码数据展示 推荐总结 前言 当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化,电商不仅从简单的在线购物演变为综合性的购物生态系统,还融合了人工智能、大数据和云计算等先进技术。…...
python如何统计列表中元素出现的次数
在 Python 中,可以使用多种方法来统计列表中元素出现的次数。以下是一些常用的方法: 方法 1: 使用 count() 方法 list 对象有一个内置的 count() 方法,可以直接统计某个元素在列表中出现的次数。 my_list [1, 2, 3, 2, 1, 4, 2] count_of…...
【算法】山脉数组的峰顶索引
难度:中等 题目描述: 给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。 返回峰值元素的下标。 你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。 示例 1: 输入:arr [0,1,0]…...

牛客 JZ31.栈的压入,弹出序列 C++写法
牛客 JZ31.栈的压入,弹出序列 C写法 思路🤔: 创建一个栈,push压入序列,然后用栈顶跟弹出序列比,如果一样就出栈并且继续比较,不一样就再次push入栈,直到压入序列走完,如果…...
PageHelper在Mybatis的一对多表关联时total数错误
最近在学习PageHelper遇到一个bug记录一下: 在Mybatis的一对多表中,PageHelper获取的total是所有的记录数,而不是我想要的第一次sql的记录数。 解决方案1: 不要在mapper层获取一对多关联,在service层先获取一&#…...

(20240806)硫氧镁 / 碱式硫酸镁-混凝土
一、目录 一篇博士论文,5篇硕士论文,南京航空航天大学双一流211,60。余红发团队 具体涉及到 (1) 碱式硫酸镁水泥的混凝土应用 、(一篇博士论文) 有微观分析 (2)混…...

string类的模拟实现(C++)
一、前言 想要模拟实现一个库中的类,那就要首先要熟悉如何使用这个类。建议通过下面博客,完成对Cstring类的学习。 C的string类-CSDN博客 二、模拟实现 我们将从string的成员函数即成员变量入手,模拟实现string类。 成员变量 string类的…...
C++_sizeof的相关知识点
1.指针的大小永远是固定的,取决于处理器位数,32位就是 4 字节,64位就是 8 字节 2.数组作为函数参数时会退化为指针,大小要按指针的计算 int func(char array[]) {printf("sizeof%d\n", sizeof(array));printf("s…...
Istio Proxy的Envoy代理架构中,Upstream提供的功能是:
Istio Proxy的Envoy代理架构中,Upstream提供的功能是: A. 接收来自Envoy连接和请求的主机,并返回响应 B. 连接的一组逻辑相同的上游主机 C. 将下游主机连接到Envoy的主机,用来发送请求并接受响应 选择A Istio Proxy的Envoy代理架…...

LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】
【栈】No. 0155 最小栈【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持! …...

【HarmonyOS】鸿蒙应用实现截屏
【HarmonyOS】鸿蒙应用实现截屏 组件截屏 通过componentSnapshot的get函数,将需要截图的组件设置id传进去即可。 import { componentSnapshot } from kit.ArkUI; import { image } from kit.ImageKit;/*** 截图*/ Entry Component Preview struct SnapShotPage {S…...
Conda包依赖侦探:conda inspect命令全解析
Conda包依赖侦探:conda inspect命令全解析 在Conda环境中,管理包及其依赖关系是一项重要任务。conda inspect命令是一个强大的工具,它可以提供包的详细信息,包括依赖关系、链接、版本等。这对于诊断环境问题、理解包的依赖结构以…...

数模——灰色关联分析算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、基本概念了解 1.什么是灰色系统? 2.什么是关联分析? 二、模型原理 三、建模过程 1.找母序列(参考序列&am…...
Python爬虫技术 第27节 API和RESTful服务
Python 爬虫技术是一种自动化获取网页内容的方法,通常用于数据收集、信息抽取或自动化测试。在讲解 Python 爬虫技术时,我们通常会涉及到以下几个关键概念: HTTP 请求:爬虫通过发送 HTTP 请求来获取网页内容,这是爬虫与…...

音视频入门基础:WAV专题(4)——FFmpeg源码中获取WAV文件音频压缩编码格式、采样频率、声道数量、采样位数、码率的实现
音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…...
环境变量在Conda中的魔法:控制包安装的秘诀
环境变量在Conda中的魔法:控制包安装的秘诀 Conda不仅是Python和其他语言包的包管理器,它还是一个强大的环境管理器。在使用Conda时,环境变量可以极大地增强其功能,允许用户控制包的安装过程,实现定制化的安装策略。本…...

VS Code C/C++ MSVC编译器
官方教程 通过快捷方式打开VS Code是编译不了的,需要对tasks.json修改(Tasks: Configure default build task) 先创建tasks.json 复制这段配置到tasks.json,记得修改VsDevCmd.bat的路径 {"version": "2.0.0","windows": {"options"…...

【技巧】IDEA 个性化配置
【技巧】IDEA 个性化配置 自动补全 关闭大小写区分 自动导包 插件 Rainbow Brackets 彩色括号 更容易区分是哪个括号...
`pytest` 中一些常用的选项
下面列出的参数和功能涵盖了 pytest 中一些常用的选项,但 pytest 还有许多其他参数和功能。以下是一些补充的 pytest 命令行参数和功能: 其他命令行参数 测试配置 --confcutdir<path>: 只加载指定目录及其子目录中的配置文件。例如 --confcutdirs…...

fme从json中提取位置到kml中
fme从json中提取位置到kml中 简单参考,我自己要用的,越弄越复杂。 概述-模板总体结构 数据就是官方提供的数据,模板的基本节结构是读模块+转换器+写模块,最近爬取一些json文件,用到了。 1.使用json读模块读取数据 首先检查一下源数据 使用文本打开数据集,可以看到非缩…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...