Python爬虫进阶实战:用海外代理ip批量采集 eBay 爆款商品

简介: 在跨境电商竞争激烈的当下,掌握爆款商品数据是选品和营销的关键。本文详解如何通过 Python 自动采集 eBay 商品信息,包括标题、价格、销量、链接和图片,并保存为 Excel 文件用于分析。重点介绍了使用海外代理 IP 避免封禁的策略,以及如何结合代理池、随机 UA、请求重试等手段提升采集稳定性。内容适合跨境电商从业者及数据采集初学者参考实践。

一、前言

如果说跨境电商是一场没有硝烟的战争,那么数据就是最锋利的武器。 在 eBay 这样的国际电商平台上,热销商品的背后,往往意味着:

  • 潮流趋势的风向标 🎯 —— 哪些品类在快速崛起?
  • 利润空间的显微镜 💰 —— 市场价格区间在哪里,怎么避免低价内卷?
  • 选品决策的导航仪 📊 —— 该备哪些货、投多少广告,才不至于踩坑?


可现实是,很多朋友刚写好一个简单爬虫,没跑几页就遭遇 403 禁止访问 或者被弹出“你是机器人吗?”的拦截提示。这背后的核心问题就是:IP 和访问模式太单一,很容易被目标网站识别。



具体如何实施呢?很多小白依然瞎子抓虾一头雾水。别着急,今天我们就从 0 到 1 带你一起来最终实现:自动批量采集某关键词下的 eBay 热销商品,并保存到 Excel 中。



二、目标与思路

2.1 采集目标

  • 商品标题
  • 商品价格
  • 成交量
  • 商品链接
  • 商品图片

2.2 实现思路

  • 分析搜索页面 URL 参数,找出关键词与翻页逻辑。
  • 用 Python + requests 模拟请求,获取页面 HTML。
  • 用 XPath 定位商品卡片结构,提取需要的字段。
  • 接入海外代理ip,实现 海外节点访问
  • 增加项目成功率的一些小方法:代理池轮换、请求重试、随机 UA、延时限速。
  • 结果写入 Excel,方便后续做选品分析。


三、环境准备

  • Python:3.10
  • 编辑器:PyCharm / VS Code
  • 第三方库
pip install requests lxml pandas


四、接入海外代理IP

在数据采集场景中,海外代理ip的作用可以说是非常必要的。

  • 避免同一 IP 短时间请求过多,触发封禁。
  • 根据目标市场选择合适的地区节点(例如美国、英国、德国)。
  • 提升请求的成功率和稳定性。


获取API 提取链接,例如:

https://overseas.proxy.qg.net/get?key=yourkey&num=1&area=&isp=&format=txt&seq=\r\n&distinct=false


五、eBay 页面分析

在 eBay 搜索“iphone”,URL 如下:

https://www.ebay.com/sch/i.html?_nkw=iphone&_pgn=1

通过对比翻页:

  • _nkw → 关键词
  • _pgn → 页码

这意味着只要改 _pgn=2,3,4…,就能翻页抓取。


六、实战采集

废话不多说,直接上:

import os, time, random, logging, requests, pandas as pd
 from lxml import etree
 from typing import List, Dict, Optional
 
 # =========================
 # 可配置区
 # =========================
 KEYWORD = "iphone"
 SITE = "www.ebay.com"
 PAGES = 5
 PROXY_API = "https://overseas.proxy.qg.net/get?key=yourkey&num=1&area=&isp=&format=txt&seq=\r\n&distinct=false"#使用青果网络海外代理IP API
 OUTPUT_XLSX = f"{KEYWORD}_ebay_hot.xlsx"
 
 # =========================
 # 日志
 # =========================
 logging.basicConfig(level=logging.INFO,
     format="%(asctime)s | %(levelname)s | %(message)s")
 logger = logging.getLogger("ebay-hot")
 
 # =========================
 # 工具:UA 池
 # =========================
 UA_POOL = [
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36",
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/605.1.15 Version/16.5 Safari/605.1.15",
     "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/123.0 Safari/537.36",
     "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0",
 ]
 
 def rand_headers(): return {"User-Agent": random.choice(UA_POOL)}
 
 # =========================
 # 代理池
 # =========================
 def get_proxy() -> Optional[Dict[str, str]]:
     try:
         r = requests.get(PROXY_API, timeout=8)
         ip = r.text.strip().splitlines()[0].strip()
         return {"http": f"http://{ip}", "https": f"http://{ip}"}
     except Exception as e:
         logger.warning(f"获取代理失败:{e}")
         return None
 
 # =========================
 # 请求封装(重试+回退)
 # =========================
 def fetch_html(url: str, retries=4) -> Optional[str]:
     for attempt in range(1, retries+1):
         proxies = get_proxy()
         headers = rand_headers()
         try:
             logger.info(f"请求 {url} | 尝试 {attempt}")
             r = requests.get(url, headers=headers, proxies=proxies, timeout=12)
             r.raise_for_status()
             return r.text
         except Exception as e:
             backoff = 2 ** attempt + random.random()
             logger.warning(f"失败:{e} | {backoff:.1f}s 后重试")
             time.sleep(backoff)
     return None
 
 # =========================
 # 解析函数
 # =========================
 def parse(html: str, page: int) -> List[Dict]:
     tree = etree.HTML(html)
     items = tree.xpath('//li[contains(@class,"s-item")]')
     results = []
     for it in items:
         title = _first(it.xpath('.//h3/text()'))
         price = _first(it.xpath('.//span[@class="s-item__price"]/text()'))
         sold = _first(it.xpath('.//span[contains(text(),"sold")]/text()'))
         link = _first(it.xpath('.//a[@class="s-item__link"]/@href'))
         img = _first(it.xpath('.//img[contains(@class,"s-item__image-img")]/@src'))
         if title and link:
             results.append({
                 "页码": page, "标题": title, "价格": price,
                 "销量": sold, "链接": link, "图片": img
             })
     return results
 
 def _first(lst): return lst[0].strip() if lst else None
 
 # =========================
 # 主流程
 # =========================
 def run():
     all_data = []
     for p in range(1, PAGES+1):
         url = f"https://{SITE}/sch/i.html?_nkw={KEYWORD}&_pgn={p}"
         html = fetch_html(url)
         if html:
             rows = parse(html, p)
             logger.info(f"第 {p} 页采集 {len(rows)} 条")
             all_data.extend(rows)
         time.sleep(random.uniform(2, 5))
 
     if all_data:
         df = pd.DataFrame(all_data)
         df.drop_duplicates(subset=["链接"], inplace=True)
         df.to_excel(OUTPUT_XLSX, index=False)
         logger.info(f"导出完成:{os.path.abspath(OUTPUT_XLSX)}")
 
 if __name__ == "__main__":
     run()


相关文章
|
8月前
|
数据采集 负载均衡 监控
巨量http,全民ip,芝麻http,太阳http,天启代理,大麦代理,2025最新测评隧道代理选谁?
隧道代理通过云端自动切换IP,简化了传统代理的复杂操作,成为数据采集、广告监测等领域的高效工具。本文解析其工作原理,探讨选型要点,助你找到最适合的方案。
|
11月前
|
数据采集 存储 数据可视化
利用海外代理IP,做Twitter2026年全球趋势数据分析
本文介绍了如何利用Python结合海外代理IP完成Twitter趋势数据的抓取与分析。首先,通过配置高质量的海外代理IP解决访问频率限制问题,确保数据采集的稳定性和精准性。接着,解析Twitter页面的HTML结构,定位趋势数据的位置,并使用XPath提取所需内容。随后,展示了核心爬虫代码,结合多线程技术提高效率。最后,对抓取的数据进行清洗、存储和可视化分析,生成直观的趋势图表。整个流程包括工具准备、代理配置、数据抓取、清洗存储及可视化,为品牌监控、市场洞察提供了实用方法。
|
数据采集 人工智能 安全
5分钟,学会自建海外代理IP池
本文详解如何从0到1搭建实用的海外代理IP池,适合跨境、爬虫、AI数据等业务。摒弃免费IP风险与自建高成本,推荐使用成熟商业服务,结合Python实现IP自动获取、验证与管理,安全高效,新手友好。
|
11月前
|
缓存 自然语言处理 数据挖掘
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
随着海外代理IP需求增加,市场上涌现了众多服务商如ipdodo、stormproxies等。然而,这些服务商良莠不齐,语言障碍、时差问题及低效客服机制常让人头疼。
2025年,ipdodo、stormproxies、PYPROXY、LunaProxy、abcproxy、dataimpulse、proxy cheap这些海外代理用哪家?
|
11月前
|
数据采集 存储 数据可视化
2025python实战:利用海外代理IP验证广告投放效果
本文介绍了如何利用Python结合海外代理IP技术,验证广告在不同国家的实际投放效果。通过模拟各地网络环境访问广告页面,检查内容是否与计划一致,并生成曝光报告。具体实现包括:获取高质量代理IP、使用Selenium或Playwright模拟用户行为、解析广告内容及生成可视化报告。案例显示,该方法能有效确保广告精准投放,优化策略并节省预算。
|
10月前
|
数据采集 数据可视化 JavaScript
用Python采集CBC新闻:如何借助海外代理IP构建稳定采集方案
本文介绍了如何利用Python技术栈结合海外代理IP采集加拿大CBC新闻数据。内容涵盖使用海外代理IP的必要性、青果代理IP的优势、实战爬取流程、数据清洗与可视化分析方法,以及高效构建大规模新闻采集方案的建议。适用于需要获取国际政治经济动态信息的商业决策、市场预测及学术研究场景。
|
人工智能
问deepseek国内最好的代理IP服务提供商,答案竟然是……
随着DeepSeek AI的流行,各行业纷纷尝试其应用。在询问“国内最佳代理IP服务提供商”时,DeepSeek的回答出人意料却又合情合理。
|
JSON API 开发者
python实战 | 如何利用海外代理IP,实现Facebook内容营销自动化
本文探讨了Facebook营销自动化中的挑战与解决方案。首先分析了账号风控、IP受限及手动操作效率低等问题,随后介绍了通过Python编程结合高质量海外代理IP(如青果网络)实现自动化的技术路径。内容涵盖环境配置、代理IP使用、Facebook开发者账号注册及两种自动化方法:Graph API动态发布与Selenium模拟用户操作。最后总结指出,该方案可扩展至其他平台,助力全球矩阵营销。
python实战 | 如何利用海外代理IP,实现Facebook内容营销自动化
|
数据采集 安全 调度
如何用Python搭建一个好用的海外代理IP池子?
本文介绍了如何通过Python构建一个高质量的海外代理IP池,解决全球化数据采集中的IP访问限制、速度瓶颈及资源稳定性问题。文章详细讲解了代理IP池的重要性,包括绕过地理限制、提高访问成功率和保障爬取效率,并推荐了青果网络作为可靠的海外代理IP服务提供商。随后,文章分步骤指导读者完成从安装必要库到整合爬虫任务的全过程,包括获取、验证海外代理IP以及构建动态调度管理的IP池。最后,作者建议使用企业级服务以简化基础设施搭建,专注于采集逻辑与数据分析,助力更高效的爬虫项目开发。
如何用Python搭建一个好用的海外代理IP池子?
|
数据采集 存储 安全
Python爬虫实战:利用短效代理IP爬取京东母婴纸尿裤数据,多线程池并行处理方案详解
本文分享了一套结合青果网络短效代理IP和多线程池技术的电商数据爬取方案,针对京东母婴纸尿裤类目商品信息进行高效采集。通过动态代理IP规避访问限制,利用多线程提升抓取效率,同时确保数据采集的安全性和合法性。方案详细介绍了爬虫开发步骤、网页结构分析及代码实现,适用于大规模电商数据采集场景。