当前位置: 首页 > article >正文

利用 Python 爬虫进行跨境电商数据采集

  • 1 引言
  • 2 代理IP的优势
  • 3 获取代理IP账号
  • 4 爬取实战案例---(某电商网站爬取)
    • 4.1 网站分析
    • 4.2 编写代码
    • 4.3 优化代码
  • 5 总结

1 引言

  在数字化时代,数据作为核心资源蕴含重要价值,网络爬虫成为企业洞察市场趋势、学术研究探索未知领域的重要技术手段。然而爬虫实践中常面临技术挑战,例如某电商企业通过爬虫获取竞品数据时,因高频请求触发目标平台 IP 封锁机制导致采集中断。IP 代理在网络爬虫中发挥关键作用:通过分布式请求分散访问压力,可规避单 IP 高频访问限制并突破地域内容获取限制;同时能隐藏真实 IP 地址降低法律风险,模拟多用户行为特征优化反爬虫策略,有效平衡数据获取需求与网络访问规则。这种技术工具通过突破技术限制、提升采集效率、保障数据安全等多维价值,成为网络爬虫体系中的重要组成部分。本文将介绍代理IP在网络爬虫中的重要性,并结合实际应用。

2 代理IP的优势

  1. 强大的架构性能:采用高性能分布式集群架构,具备无限并发能力,不限制并发请求,能完美满足多终端使用需求,为各类业务稳定运行提供坚实保障。

  2. 丰富的功能配置:支持多种代理认证模式,同时兼容 HTTP、HTTPS 以及 socks5 协议。还提供 API 接口调用与可视化监控统计功能,为用户业务开展提供极大便利。

  3. 优质的资源保障:拥有千万级优质住宅代理 IP 池,实时更新来自 200 多个国家的真实家庭住宅 IP。这些 IP 具有高效率、低延迟的特点,且能提供超高私密性,有力保障数据安全。

  4. 个性化的定制服务:兼顾个人和企业用户的专属需求,支持根据业务场景定制独享 IP。 这个团队提供 24 小时服务与技术支持,全方位满足用户多样化业务需求。

3 获取代理IP账号

  这里我们可以选择进入官网网站,获取账号

image-20250226083712407

  在测试前,我们记得实名认证一下,这样我们就可以享受500M测试的额度了,接下来我们简单演示一下使用账密认证的形式获取代理~


  在获取代理前,我们首先要创建一下子账号,这里的用户名和密码都要采用字母+数字

image-20250226085533431

  接下来我们就可以获取代理信息了,前往获取代理,然后选择账密认证。这里选择所需的地区、子用户、粘性会话、代理协议以及我们需要的其他参数,我这里默认

image-20250226085616542

 生成代理信息,完成前面的设置后,我们将获得代理信息。请复制提供的详细信息并在您的代理软件中配置使用。

image-20250226085749886

 套餐选择一般有两个选项动态住宅代理静态住宅代理,当然我相信很多人是不了解这两个的,这里我简单的介绍一下

  • 动态住宅代理的 IP 地址处于不断变化之中,这使得它在模拟多样化用户行为、规避网站访问限制等方面表现出色,像网络爬虫、广告验证等场景常能看到它的身影。其成本往往根据使用量或时长而定,相对较为灵活,价格一般不算高,还能为用户提供较好的匿名性保护,不过在速度和稳定性上可能会有一些波动。

  • 静态住宅代理有着固定不变的 IP 地址,在速度和稳定性方面更具优势,适用于对网络质量要求高的网站测试、电商监控等场景。由于其资源的特殊性,价格通常偏高,而且因为 IP 固定,相对容易被追踪,匿名性稍弱。

 此外官方还设置了许多使用教程,感兴趣的小伙伴可自行查阅!

 接下来让我们进入爬取实战环节。

4 爬取实战案例—(某电商网站爬取)

4.1 网站分析

 这是一个海外电商平台,今天我想要获取下面图中一些信息,这里选取的关键词是:IPhone 16

image-20250226103213908

 接下来我们想要获取商品的:title、price、link,如何获取呢,我们可以选择点击键盘上的F12,之后我们就可以按照下面的示例,进行选中对应的块了

image-20250226103523205

 这里我们选择通过soup.find_all(‘div’, class_=‘product-tuple-listing’)来查找所有的商品块

image-20250226103816035

 每个商品块包含了:

  • 商品名称:位于 <p class="product-title"> 标签中。
  • 商品价格:位于 <span class="lfloat product-price"> 标签中。
  • 商品链接:位于 <a> 标签中,包含 href 属性。

 上面是简单的网站结构分析,下面我们进行实战


4.2 编写代码

  1. 首先我们需要导入库,这里我们导入requests和bs4,这两种库
    • requests 是 Python 中一个简洁且功能强大的 HTTP 库,用于发送各种 HTTP 请求,使得在 Python 中进行网络请求变得非常容易。
    • bs4BeautifulSoup 4,是一个用于解析 HTML 和 XML 文档的 Python 库,能够从网页中提取所需的数据。
import requests
from bs4 import BeautifulSoup
  1. 其次设置请求头,如下
headers = {'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',
}
  1. 模拟浏览器请求。很多网站会根据请求头来判断请求是否来自浏览器,以防止自动化脚本等的访问。这里你也可以选择多设置几个

image-20250226104531453

  1. 之后我们确定目标 URL,这里是可以变动的,但是如果变动过大的话,后面对应的结构也得变动

  2. 获取页面的内容,requests.get(url, headers=headers):发送 GET 请求到 Snapdeal 网站,获取网页内容。

    response.text:获取返回的 HTML 内容。BeautifulSoup(response.text, ‘html.parser’):使用 BeautifulSoup 解析 HTML 内容。'html.parser' 是解析器,BeautifulSoup 会将 HTML 内容转换成一个可以通过 Python 代码进行操作的对象。

    response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser')

  3. 定义提取商品信息的函数,这里使用find_all函数

    def extract_product_info():products = []product_elements = soup.find_all('div', class_='product-tuple-listing')
    

    这里设置products = []:初始化一个空列表,用来存储商品信息。

    soup.find_all('div', class_='product-tuple-listing'):通过 BeautifulSoup 找到所有符合条件的 div 元素,这些 div 元素是每个商品的容器。根据页面的结构,每个商品信息都被包含在一个 div 标签中,其类名为 product-tuple-listing

  4. 接下来就是for循环遍历了

for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p', class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span', class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None

 上面就是整个代码的核心步骤,下面我给出完整的代码

import requests
from bs4 import BeautifulSoup# 设置请求头模仿浏览器
headers = {'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',
}# 指定 URL,这里用的是你提供的 iPhone 16 搜索页面链接
url = 'https://www.snapdeal.com/search?keyword=iPhone%2016&santizedKeyword=Sony&catId=0&categoryId=0&suggested=false&vertical=p&noOfResults=20&searchState=&clickSrc=go_header&lastKeyword=&prodCatId=&changeBackToAll=false&foundInAll=false&categoryIdSearched=&cityPageUrl=&categoryUrl=&url=&utmContent=&dealDetail=&sort=rlvncy'# 获取页面内容
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')# 提取商品的名称、价格、URL等
def extract_product_info():products = []# 找到包含产品的所有元素product_elements = soup.find_all('div', class_='product-tuple-listing')for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p',class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span',class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None# 仅当所有必要的字段都有时才记录if title and price and link:product_info = {'title': title,'price': price,'link': f'https://www.snapdeal.com{link}',}products.append(product_info)return products# 获取并打印产品信息
products = extract_product_info()
for product in products:print(f"Title: {product['title']}")print(f"Price: {product['price']}")print(f"Link: {product['link']}")print("-" * 40)

 下面是运行的结果:

image-20250226114536449

4.3 优化代码

 接下来我们使用代理再试试,下面是官方为我们提供的关于Demo示例,从代码来看,还是十分简洁明了的

import requests
if __name__ == '__main__':
proxyip = "http://username_custom_zone_US:password@us.ipwo.net:7878"
url = "http://ipinfo.io"
proxies = {
'http': proxyip,
}
data = requests.get(url=url, proxies=proxies)
print(data.text)

 接下来我们再根据提供的代码示例,从而优化我们的代码,下面是完整的代码阐述

import requests
from bs4 import BeautifulSoup# 设置请求头模仿浏览器
headers = {'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',
}# 设置代理
proxyip = " "  # 替换为你自己的ip信息
proxies = {'http': proxyip,
}# 指定 URL,这里用的是你提供的 iPhone 16 搜索页面链接
url = 'https://www.snapdeal.com/search?keyword=iPhone%2016&santizedKeyword=Sony&catId=0&categoryId=0&suggested=false&vertical=p&noOfResults=20&searchState=&clickSrc=go_header&lastKeyword=&prodCatId=&changeBackToAll=false&foundInAll=false&categoryIdSearched=&cityPageUrl=&categoryUrl=&url=&utmContent=&dealDetail=&sort=rlvncy'# 获取页面内容,使用代理,禁用 SSL 验证
response = requests.get(url, headers=headers, proxies=proxies, verify=False)  # verify=False 关闭 SSL 验证
soup = BeautifulSoup(response.text, 'html.parser')# 提取商品的名称、价格、URL等
def extract_product_info():products = []# 找到包含产品的所有元素product_elements = soup.find_all('div', class_='product-tuple-listing')for product in product_elements:title = product.find('p', class_='product-title').text.strip() if product.find('p', class_='product-title') else Noneprice = product.find('span', class_='lfloat product-price').text.strip() if product.find('span', class_='lfloat product-price') else Nonelink = product.find('a', href=True)['href'] if product.find('a', href=True) else None# 仅当所有必要的字段都有时才记录if title and price and link:product_info = {'title': title,'price': price,'link': f'https://www.snapdeal.com{link}',}products.append(product_info)return products# 获取并打印产品信息
products = extract_product_info()
for product in products:print(f"Title: {product['title']}")print(f"Price: {product['price']}")print(f"Link: {product['link']}")print("-" * 40)

 下面是运行结果:

image-20250226114504892

5 总结

  通过本文的介绍,我们可以清楚的了解并认识到代理在网络数据采集是十分重要的,针对snapdeal电商平台的商品数据采集,发现了IPWO的强大之处,使我们进行网络数据采集的时候,效率大大的提高~

相关文章:

利用 Python 爬虫进行跨境电商数据采集

1 引言2 代理IP的优势3 获取代理IP账号4 爬取实战案例---&#xff08;某电商网站爬取&#xff09;4.1 网站分析4.2 编写代码4.3 优化代码 5 总结 1 引言 在数字化时代&#xff0c;数据作为核心资源蕴含重要价值&#xff0c;网络爬虫成为企业洞察市场趋势、学术研究探索未知领域…...

2. 在后端代码中加入日志记录模块

1. 说明 日志模块基本上是每一个软件系统开发中必不可少的&#xff0c;主要用于持久记录一些代码运行中的输出信息&#xff0c;辅助编码人员进行代码调试&#xff0c;以及后期软件上线运行报错分析。在Python中加入日志模块比较简单&#xff0c;只需要借助logging和RotatingFi…...

C++ 17 允许在 for 循环,if 语句,switch 语句中初始化变量

看到 c 有这个特性&#xff0c;python 和 java 似乎都没有&#xff0c;根据 AI 的回答进行了一些整理总结。 文章目录 **1. 在 for 循环中初始化变量****特点****多个变量初始化** **2. 在 if 语句中初始化变量&#xff08;C17 及以上&#xff09;****示例****特点** **3. 在 s…...

Pycharm中怎么加快下载三方包速度

Pycharm中怎么加快下载三方包速度 使用命令行下载,-i pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ 在Windows系统的PyCharm中使用Python 3.12环境时,可通过以下几种方式配置不同镜像源来加快下载包的速度。 方式一:在PyCharm界面中直接配置镜…...

Transformer 代码剖析7 - 词元嵌入(TokenEmbedding) (pytorch实现)

一、类定义与继承关系剖析 1.1 代码结构图示 #mermaid-svg-9COHbtmHJhpiroHM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9COHbtmHJhpiroHM .error-icon{fill:#552222;}#mermaid-svg-9COHbtmHJhpiroHM .error-t…...

Unity中动态切换光照贴图的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter27-工作者线程

二十七、工作者线程 工作者线程 前端开发者常说&#xff1a;“JavaScript 是单线程的。”这种说法虽然有些简单&#xff0c;但描述了 JavaScript 在浏览器中的一般行为。因此&#xff0c;作为帮助 Web 开发人员理解 JavaScript 的教学工具&#xff0c;它非常有用。单线程就意味…...

Qt基于等待条件QWaitCondition实现的任务队列模型示例

核心概念 Qt中的QWaitCondition是一个用于多线程同步的类&#xff0c;允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用&#xff0c;协调线程之间的执行顺序&#xff0c;适用于生产者-消费者模型、任务队列调度等场景。 ​wait()&#xff1a;使当前线程进…...

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链&#xff0c;继续使用基于 langgraph 链 &#xff0c;对结构化数据库 SQlite 进行查询的方法。该系统建立以后&#xff0c;我们不需要掌握专业的 SQL 技能&#xff0c;可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...

【RAG生成】生成模块核心技术解密:从理论到实践的全链路优化

RAG知识系列文章 【RAG实践】手把手Python实现搭建本地知识问答系统【RAG进阶】从基础到模块化&#xff1a;深度解析RAG技术演进如何重塑AI知识边界【RAG检索】RAG技术揭秘&#xff1a;检索≠召回&#xff1f;【RAG增强】解密RAG系统排序优化&#xff1a;从基础原理到生产实践…...

近似最近邻(ANN)算法库实战

引言&#xff1a;从“精确”到“近似”的思维跃迁 在电商推荐系统中&#xff0c;每秒需要为上百万用户找到最相关的商品——传统KNN的暴力搜索甚至无法完成一次查询&#xff0c;而近似最近邻&#xff08;ANN&#xff09;算法库如Faiss&#xff08;Facebook&#xff09;和Annoy…...

Linux与UDP应用2:简易聊天室

UDP应用2&#xff1a;简易聊天室 本篇介绍 在前面的基本使用过程中已经完成了本地和网络通信&#xff0c;既然一个人和一台服务器可以进行通信&#xff0c;那么多个人连接一台服务器也可以和这台服务器实现通信。在这个基础上&#xff0c;如果服务器可以将某个人发给服务器的…...

张雪峰教育观点及争议分析

李升伟 整理 张雪峰&#xff08;网络常用名&#xff0c;本名张子彪&#xff09;是中国知名的考研辅导教师、教育领域自媒体人&#xff0c;因其幽默犀利的语言风格和直击痛点的教育观点走红网络。以下是对他的基本介绍及综合评价&#xff1a; --- ### **一、基本情况** 1. **个…...

从0开始的IMX6ULL学习篇——裸机篇之分析粗略IMX6ULL与架构

目录 简单的说一下Cortex-A7架构 讨论ARMv7a-cortex系列的运行模式 寄存器 后言 让我们到NXP的官网上扫一眼。 i.MX 6ULL应用处理器_Arm Cortex-A7单核&#xff0c;频率为900 MHz | NXP 半导体 我们先看CPU Platform&#xff0c;这个是我们的核心。 这里我们的芯片是基于Ar…...

面向实时性的超轻量级动态感知视觉SLAM系统

一、重构后的技术架构设计(基于ROS1 ORB-SLAM2增强) #mermaid-svg-JEJte8kZd7qlnq3E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JEJte8kZd7qlnq3E .error-icon{fill:#552222;}#mermaid-svg-JEJte8kZd7qlnq3E .…...

Hue UI展示中文

个人博客地址&#xff1a;Hue UI展示中文 | 一张假钞的真实世界 如果使用开发分支代码如master分支&#xff09;编译安装&#xff0c;需要自己编译语言文件。例如Hue安装目录为“/opt/hue”&#xff0c;则安装后执行以下命令&#xff1a; $ cd /opt/hue $ make locales 如果…...

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…...

【新人系列】Python 入门专栏合集

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…...

SQL命令详解之数据的查询操作

目录 1 简介 2 基础查询 2.1 基础查询语法 2.2 基础查询练习 3 条件查询 3.1 条件查询语法 3.2 条件查询练习 4 排序查询 4.1 排序查询语法 4.2 排序查询练习 5 聚合函数 5.1 一般语法&#xff1a; 5.2 聚合函数练习 6 分组查询 6.1 分组查询语法 6.2 分组查询…...

序列化选型:字节流抑或字符串

序列化既可以将对象转换为字节流&#xff0c;也可以转换为字符串&#xff0c;具体取决于使用的序列化方式和场景。 转换为字节流 常见工具及原理&#xff1a;在许多编程语言中&#xff0c;都有将对象序列化为字节流的机制。例如 Python 中的 pickle 模块、Java 中的对象序列化…...

使用C#控制台调用本地部署的DeepSeek

1、背景 春节期间大火的deepseek&#xff0c;在医疗圈也是火的不要不要的。北京这边的医院也都在搞“deepseek竞赛”。友谊、北医三院等都已经上了&#xff0c;真是迅速啊&#xff01; C#也是可以进行对接&#xff0c;并且非常简单。 2、具体实现 1、使用Ollama部署DeepSeek…...

Linux环境安装Nginx及版本升级指南

Linux环境安装Nginx及版本升级指南 一、安装Nginx 1. 安装前准备 # 更新系统软件包&#xff08;Ubuntu/Debian&#xff09; sudo apt update && sudo apt upgrade -y# CentOS/RHEL sudo yum update -y2. 安装依赖库 # Ubuntu/Debian sudo apt install -y curl wget…...

选开源CMS建站系统时,插件越多越好吗?

在选择开源CMS建站系统时&#xff0c;插件数量并不是唯一的衡量标准&#xff0c;更不能简单地说“插件越多就越好”&#xff0c;还是需要综合评估来考虑选择结果&#xff0c;以下是有关选择开源CMS系统时对插件数量的考量。 插件数量的优势插件数量可能带来的问题功能丰富性&a…...

Windows对比MacOS

Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1&#xff1a;打开环境变量设置窗口步骤 2&#xff1a;添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1&#xff1a;打开终端步骤 2&#xff1a;编辑环境变量配置文件步骤 3&#xff1…...

使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码

AGA8 GERG - 2008 方程是用于计算天然气混合物热力学性质的一种方法&#xff0c;下面是一个使用 Python 实现基于 AGA8 GERG - 2008 方程计算掺氢天然气压缩因子的示例代码。需要注意的是&#xff0c;AGA8 GERG - 2008 方程非常复杂&#xff0c;完整实现需要大量的系数和详细的…...

开源绝版经典小游戏合集

随着生活节奏的日益加快&#xff0c;我们常常需要一些小游戏来缓解疲惫的身心。过去&#xff0c;Windows 7自带的扫雷、蜘蛛纸牌等小游戏深受大家喜爱&#xff0c;但随着系统的更新换代&#xff0c;这些经典游戏逐渐淡出了人们的视野。我也曾花费不少时间寻找这些游戏&#xff…...

给虚拟机配置IP

虚拟机IP这里一共有三个地方要设置&#xff0c;具体说明如下&#xff1a; &#xff08;1&#xff09;配置vm虚拟机网段 如果不进行设置&#xff0c;每次启动机器时都可能是随机的IP&#xff0c;不方便我们后续操作。具体操作是&#xff1a;点击编辑→虚拟网络编辑器 选择VMne…...

YOLOv12以注意力机制为核心的架构:主要特点、创新点、使用方法

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

GD32F450 使用

GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意&#xff1a;GD32F450 总共有三种封装形式&#xff0c;本文所述的相关代码和知识&#xff0c;均为 GD32F450IX 系列。 1. 相关知识 参数配…...

Linux 动静态库和_make_进度条(一)

文章目录 一、如何理解条件编译二、动静态库1. 理论2. 实践3. 解决普通用户的sudo问题4. 技术上理解库 三、make和make_file 一、如何理解条件编译 1. gcc code.c -o code -DM 命令行级别的宏定义预处理的本质就是修改编辑我们的文本代码 头文件展开到源文件中去注释宏替换条…...