利用 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的强大之处,使我们进行网络数据采集的时候,效率大大的提高~

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

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

相关文章

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…

FPGA AXI-Stream协议详解与仿真实践

AXI-Stream协议详解与仿真实践 1 摘要 AXI-Stream总线是一种高效、简单的数据传输协议,主要用于高吞吐量的数据流传输场景。相比于传统的AXI总线,AXI-Stream总线更加简单和轻量级,它通过无需地址的方式,将数据从一个模块传输到另一个模块,适用于需要高速数据传输的应用场…

浙大 DeepSeek 线上课学习笔记

目录 DeepSeek&#xff1a;回望AI三大主义与加强通识教育 从达特茅斯启航的人工智能三大主义 人工智能三剑客之一&#xff1a;符号主义人工智能的逻辑推理 人工智能三剑客之二&#xff1a;连接主义人工智能的数据驱动 人工智能三剑客之三&#xff1a;行为主义人工智能的百…

【Python机器学习】1.2. 线性回归理论:一元线性回归、最小化平方误差和公式(SSE)、梯度下降法

喜欢的话别忘了点赞、收藏加关注哦&#xff08;关注即可查看全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 1.2.1. 什么是回归分析(Regressive Analysis)? 一些例子 举一些例子吧&#xff1a; 下图是…

golang介绍,特点,项目结构,基本变量类型与声明介绍(数组,切片,映射),控制流语句介绍(条件,循环,switch case)

目录 golang 介绍 面向并发 面向组合 特点 项目结构 图示 入口文件 main.go 基本变量类型与声明 介绍 声明变量 常量 字符串(string) 字符串格式化 空接口类型 数组 切片 创建对象 追加元素 复制切片 map(映射) 创建对象 使用 多重赋值 控制流语句…

《白帽子讲 Web 安全》之移动 Web 安全

目录 摘要 一、WebView 简介 二、WebView 对外暴露 WebView 对外暴露的接口风险 三、通用型 XSS - Universal XSS 介绍 四、WebView 跨域访问 五、与本地代码交互 js 5.1接口暴露风险&#xff1a; 5.2漏洞利用&#xff1a; 5.3JavaScript 与 Native 代码通信 六、Chr…

算法日常刷题笔记(3)

为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第三篇笔记 笔记时间为2月24日到3月2日 第一天 设计有序流 设计有序流https://leetcode.cn/problems/design-an-ordered-stream/ 有 n 个 (id, value) 对&#xff0c;其中 id 是 1 到 n 之间的一个整数&#xff…

mysql5.7离线安装及问题解决

这次主要是讲解mysql5.7离线安装教程和一主一从数据库配置 1、去官网下载自己对应的mysql https://downloads.mysql.com/archives/community/2、查看需要安装mysql服务器的linux的类型 uname -a第二步看一下系统有没有安装mysql rpm -qa|grep -i mysql3、上传安装包 用远程…

JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码

本文项目编号 T 098 &#xff0c;文末自助获取源码 \color{red}{T098&#xff0c;文末自助获取源码} T098&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

三数之和_算法

1.题目描述 首先我们分析下这道题目:假设给我们一个数组,让数组某三个不同下标的数相加最终得0,那么我就返回这三个数.但是如果返回的多个数组中的元素相同,那么我们还要删掉其中一个保留一个. 注意:这道题的重点是三个数的下标不能相等并且返回的数组中的元素也不能相等,通过…

关于Deepseek本地部署硬件环境检查教程

要在电脑上本地部署DeepSeek&#xff0c;需要关注以下硬件和软件配置&#xff1a; 硬件配置 CPU&#xff1a;至少4核CPU&#xff0c;推荐Intel i5/i7或AMD Ryzen 5/7系列处理器。内存&#xff1a;至少8GB DDR4内存&#xff0c;推荐16GB DDR4内存&#xff0c;对于大型模型建议…

一周一个Unity小游戏2D反弹球游戏 - 移动的弹板(鼠标版)

前言 本文将实现控制弹板移动,通过Unity的New Input System,可以支持鼠标移动弹板跟随移动,触控点击跟随移动,并且当弹板移动到边界时,弹板不会移动超过边界之外。 创建移动相关的InputAction 项目模版创建的时候默认会有一个InputAction类型的文件,名字为InputSystem_Ac…

250302-绿联NAS通过Docker配置SearXNG及适配Open-WebUI的yaml配置

A. 配置Docker中的代理 绿联NAS简单解决docker无法获取镜像-不用软路由 - 哔哩哔哩 B. 下载官网对应的镜像 群晖NAS用docker搭建SearXNG元搜索引擎_哔哩哔哩_bilibili C. 修改默认省略的参数&#xff0c;只配置Base_URL&#xff0c;删除其它默认的空缺项 searxng-docker/REA…

C++-第十九章:异常

目录 第一节&#xff1a;异常有哪些 第二节&#xff1a;异常相关关键字 2-1.抛出异常 2-2.捕获异常 2-3.异常的捕获规则 2-3-1.异常被最近的catch捕获 2-3-2.catch捕获的是异常的拷贝 2-3-3.异常为子类时&#xff0c;可以用父类引用接收 2-4.捕获任意异常 第三节&#xff1…

Redis详解(实战 + 面试)

目录 Redis 是单线程的&#xff01;为什么 Redis-Key(操作redis的key命令) String 扩展字符串操作命令 数字增长命令 字符串范围range命令 设置过期时间命令 批量设置值 string设置对象,但最好使用hash来存储对象 组合命令getset,先get然后在set Hash hash命令: h…

‘ts-node‘ 不是内部或外部命令,也不是可运行的程序

新建一个test.ts文件 let message: string = Hello World; console.log(message);如果没有任何配置的前提下,会报错’ts-node’ 不是内部或外部命令,也不是可运行的程序。 此时需要安装一下ts-node。 npm install

(十 五)趣学设计模式 之 命令模式!

目录 一、 啥是命令模式&#xff1f;二、 为什么要用命令模式&#xff1f;三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支…

基于单片机的智能扫地机器人

1 电路设计 1.1 电源电路 本电源采用两块LM7805作为稳压电源&#xff0c;一块为控制电路和传感器电路供电&#xff0c;另一块单独为电机供电。分开供电这样做的好处&#xff0c;有利于减小干扰&#xff0c;提高系统稳定性。 LM7805是常用的三端稳压器件&#xff0c;顾名思义0…

【Redis学习】Redis Docker安装,自定义config文件(包括RDB\AOF setup)以及与Spring Boot项目集成

【本文内容】 第1章&#xff1a;通过Docker安装Redis&#xff0c;并自定义config文件以及mount data目录。第2章&#xff1a;介绍Redis持久化到磁盘&#xff0c;有4种方式&#xff1a;RDB / AOF / NONE / RDB AOF。第3章&#xff1a;使用Server自带的redis-cli工具连接。第4章…

【3天快速入门WPF】13-MVVM进阶

目录 1. 窗体设置2. 字体图标3. 控件模板4. 页面逻辑4.1. 不使用MVVM4.2. MVVM模式实现本篇我们开发一个基于MVVM的登录页面,用来回顾下之前学习的内容 登录页面如下: 窗体取消了默认的标题栏,调整为带阴影的圆角窗体,左侧放一张登录背景图,右边自绘了一个关闭按钮,文本框…