手把手教你用爬虫抓取 1688 商品详情和店铺全量商品 API 接口——从零到实战
前言 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 商品详情
分析商品详情页 URL 在浏览器中打开 1688 商品详情页,例如:
https://detail.1688.com/offer/XXXXX.html观察页面结构,找到商品标题、价格、规格、图片等关键信息的 HTML 标签。
编写商品详情爬虫代码 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 = {}
示例:获取商品详情
product_url = "https://detail.1688.com/offer/XXXXX.html" # 替换为实际商品链接 html = get_product_detail(product_url)if html:detail = parse_product_detail(html)print(detail)三、实战二:获取店铺所有商品信息
分析店铺商品列表页 URL 在浏览器中打开 1688 店铺页面,例如:
https://shopXXXXXX.1688.com/page/offerlist_XXXXXXXX.htm观察页面结构,找到商品列表的 HTML 标签和分页逻辑。
编写店铺商品爬虫代码 pythondef get_shop_products(shop_url, pages=1):"""获取 1688 店铺所有商品信息:param shop_url: 店铺主页 URL:param pages: 爬取页数:return: 商品信息列表"""headers = {"User-Agent": UserAgent().random,}all_products = []
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}")
return all_products
def parse_shop_products(html):"""解析店铺商品列表 HTML,提取商品信息:param html: 店铺商品列表 HTML 内容:return: 商品信息列表"""soup = BeautifulSoup(html, "lxml")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 或抓包分析处理动态加载内容。五、总结与扩展
总结:本文实现了 1688 商品详情和店铺商品列表的爬取。需根据实际页面结构调整 HTML 解析逻辑。
扩展:数据存储:将数据存入数据库(如 MySQL)。API 封装:将爬虫功能封装为 RESTful API。分布式爬虫:使用 Scrapy-Redis 实现大规模爬取。六、常见问题与解决方案动态加载内容:使用 Selenium 或抓包分析接口。反爬虫限制:增加请求间隔、使用代理 IP、模拟登录。数据缺失:检查 HTML 结构是否变化,调整解析逻辑。
评论