写点什么

手把手教你用爬虫抓取 1688 商品详情和店铺全量商品 API 接口——从零到实战

作者:代码忍者
  • 2025-04-08
    江西
  • 本文字数:2231 字

    阅读完需:约 7 分钟

前言 1688 作为国内最大的 B2B 电商平台,拥有海量的商品和店铺数据。无论是做电商数据分析、竞品监控,还是开发电商聚合平台,获取 1688 的商品详情和店铺所有商品信息都是刚需。但官方 API 接口通常需要申请权限或付费,且功能有限。本文将带你从零开始,用爬虫技术实现1688商品详情抓取和店铺所有商品 API 接口的实战操作,助你轻松获取目标数据!


⚠️ 声明:爬虫技术需遵守目标网站的《robots.txt》协议和相关法律法规,本文仅供学习和研究使用,请勿用于商业爬取或恶意攻击。


一、技术准备工具与库:Python 3.xrequests(发送 HTTP 请求)BeautifulSoup(解析 HTML 页面)lxml(加速 HTML 解析)fake_useragent(随机生成 User-Agent,模拟浏览器)time(设置请求间隔,防止触发反爬)(可选)selenium(处理动态加载页面)环境搭建:安装依赖库:bashpip install requests beautifulsoup4 lxml fake_useragent 二、实战一:获取 1688 商品详情


  1. 分析商品详情页 URL 在浏览器中打开 1688 商品详情页,例如:


https://detail.1688.com/offer/XXXXX.html观察页面结构,找到商品标题、价格、规格、图片等关键信息的 HTML 标签。


  1. 编写商品详情爬虫代码 pythonimport requestsfrom bs4 import BeautifulSoupfrom fake_useragent import UserAgentimport time


def get_product_detail(product_url):"""获取 1688 商品详情:param product_url: 商品详情页 URL:return: 商品详情字典"""headers = {"User-Agent": UserAgent().random, # 随机生成 User-Agent}try:response = requests.get(product_url, headers=headers, timeout=10)response.raise_for_status() # 检查请求是否成功 return response.textexcept Exception as e:print(f"请求失败: {e}")return None


def parse_product_detail(html):"""解析商品详情 HTML,提取商品信息:param html: 商品详情 HTML 内容:return: 商品详情字典"""soup = BeautifulSoup(html, "lxml")detail = {}


# 提取商品标题title_tag = soup.select_one(".d-title-text")detail["title"] = title_tag.get_text(strip=True) if title_tag else "无标题"
# 提取商品价格(可能需要处理动态加载)price_tag = soup.select_one(".tm-price")detail["price"] = price_tag.get_text(strip=True) if price_tag else "无价格"
# 提取商品图片(示例:第一张图片)img_tag = soup.select_one(".tb-main-img img")detail["image"] = img_tag["src"] if img_tag and "src" in img_tag.attrs else "无图片"
# 其他信息(如规格、库存等)可根据页面结构提取return detail
复制代码

示例:获取商品详情

product_url = "https://detail.1688.com/offer/XXXXX.html" # 替换为实际商品链接 html = get_product_detail(product_url)if html:detail = parse_product_detail(html)print(detail)三、实战二:获取店铺所有商品信息


  1. 分析店铺商品列表页 URL 在浏览器中打开 1688 店铺页面,例如:


https://shopXXXXXX.1688.com/page/offerlist_XXXXXXXX.htm观察页面结构,找到商品列表的 HTML 标签和分页逻辑。


  1. 编写店铺商品爬虫代码 pythondef get_shop_products(shop_url, pages=1):"""获取 1688 店铺所有商品信息:param shop_url: 店铺主页 URL:param pages: 爬取页数:return: 商品信息列表"""headers = {"User-Agent": UserAgent().random,}all_products = []

  2. for page in range(1, pages + 1):print(f"正在爬取第 {page} 页...")# 构造分页 URL(需根据实际页面结构调整)page_url = f"{shop_url}/page/offerlist_XXXXXX.htm?page={page}" # 示例分页逻辑 try:response = requests.get(page_url, headers=headers, timeout=10)response.raise_for_status()all_products.extend(parse_shop_products(response.text))time.sleep(2) # 避免请求过快 except Exception as e:print(f"第 {page} 页爬取失败: {e}")

  3. return all_products


def parse_shop_products(html):"""解析店铺商品列表 HTML,提取商品信息:param html: 店铺商品列表 HTML 内容:return: 商品信息列表"""soup = BeautifulSoup(html, "lxml")products = []


# 示例:提取商品标题和链接for item in soup.select(".offer-item"):  # 根据实际结构调整    title = item.select_one(".title a").get_text(strip=True) if item.select_one(".title a") else "无标题"    link = "https://s.1688.com" + item.select_one(".title a")["href"] if item.select_one(".title a") else "#"    products.append({"title": title, "link": link})
return products
复制代码

示例:获取店铺商品

shop_url = "https://shopXXXXXX.1688.com" # 替换为实际店铺链接 products = get_shop_products(shop_url, pages=2) # 爬取前 2 页 for product in products:print(product)四、反爬虫策略随机 User-Agent:避免被识别为爬虫。请求间隔:设置随机延迟,模拟人工操作。IP 代理:使用代理 IP 池,防止 IP 封禁。Cookies:模拟登录后携带 Cookies,保持会话。动态内容:使用 Selenium 或抓包分析处理动态加载内容。五、总结与扩展


  1. 总结:本文实现了 1688 商品详情和店铺商品列表的爬取。需根据实际页面结构调整 HTML 解析逻辑。

  2. 扩展:数据存储:将数据存入数据库(如 MySQL)。API 封装:将爬虫功能封装为 RESTful API。分布式爬虫:使用 Scrapy-Redis 实现大规模爬取。六、常见问题与解决方案动态加载内容:使用 Selenium 或抓包分析接口。反爬虫限制:增加请求间隔、使用代理 IP、模拟登录。数据缺失:检查 HTML 结构是否变化,调整解析逻辑。

用户头像

代码忍者

关注

还未添加个人签名 2024-07-23 加入

还未添加个人简介

评论

发布
暂无评论
手把手教你用爬虫抓取1688商品详情和店铺全量商品API接口——从零到实战_1688API接口_代码忍者_InfoQ写作社区