全部
常见问题
产品动态
精选推荐

利用 Python 爬虫获取 1688 店铺的所有商品:实战指南

管理 管理 编辑 删除

在电商领域,获取 1688 店铺的所有商品信息对于市场分析、竞品研究和用户体验优化至关重要。1688 作为国内领先的 B2B 电商平台,提供了丰富的商品资源。通过 Python 爬虫技术,我们可以高效地获取 1688 店铺的所有商品信息。本文将详细介绍如何利用 Python 爬虫获取 1688 店铺的所有商品,并提供完整的代码示例。

一、准备工作

(一)注册 1688 开放平台账号

首先,需要在 1688 开放平台注册一个开发者账号。登录后,创建一个新的应用,获取应用的 App Key App Secret,这些凭证将用于后续的 API 调用。

(二)安装必要的 Python 库

安装以下 Python 库,用于发送 HTTP 请求、解析 HTML 内容和生成签名:

bash

pip install requests beautifulsoup4 pandas hashlib

二、爬虫实现步骤

(一)分析 1688 页面结构

目标 URL 示例:https://shop.1688.com/xxxxx/xxxxxx.htm(店铺主页)。商品数据通常通过 AJAX 加载,需分析:

  • 商品列表的 API 接口(如果有)
  • 动态加载的滚动触发方式
  • 分页逻辑

(二)模拟登录(可选)

部分店铺需要登录才能查看价格,可使用 Selenium 自动填充账号密码:

Python

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://login.1688.com/")
driver.find_element_by_id("fm-login-id").send_keys("your_username")
driver.find_element_by_id("fm-login-password").send_keys("your_password")
driver.find_element_by_class_name("fm-submit").click()

(三)获取商品列表

使用 Selenium 滚动页面,触发 AJAX 加载所有商品:

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

def scroll_to_bottom(driver):
    last_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)  # 等待加载
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

driver.get("https://shop.1688.com/shop/xxxxxx.htm")
scroll_to_bottom(driver)  # 滚动到底部加载所有商品

(四)解析商品数据

使用 BeautifulSoup 提取商品信息:

Python

from bs4 import BeautifulSoup

soup = BeautifulSoup(driver.page_source, 'html.parser')
products = []
for item in soup.select(".offer-list-row .offer-item"):
    name = item.select_one(".offer-title").get_text(strip=True)
    price = item.select_one(".price").get_text(strip=True)
    sales = item.select_one(".sale-num").get_text(strip=True)
    link = item.select_one(".offer-title a")["href"]
    products.append({
        "商品名称": name,
        "价格": price,
        "销量": sales,
        "链接": link
    })
    

(五)使用 API 接口获取商品详情

如果需要获取更丰富的商品详情数据,可以使用 1688 开放平台的 API 接口。通过 API 接口获取数据可以避免反爬限制,同时获取更完整的商品信息。

生成签名

1688 API 接口采用 MD5 加密签名验证请求合法性。签名生成步骤如下:

  1. 将除 sign 外的参数按字母升序排列。
  2. 拼接键值对为字符串,末尾追加 App Secret。
  3. 对拼接结果进行 MD5 哈希并转为大写。
  4. 以下是 Python 代码示例:

Python

import hashlib
import time

def generate_sign(params, app_secret):
    params_sorted = sorted(params.items())
    sign_str = "&".join([f"{k}{v}" for k, v in params_sorted if k != "sign"])
    sign = hashlib.md5((sign_str + app_secret).encode('utf-8')).hexdigest().upper()
    return sign
    

发送请求

使用 requests 库向 1688 API 接口发送请求。以下是完整代码示例:

Python

import requests

app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
product_id = "商品ID"  # 示例:从商品 URL 中获取

params = {
    "method": "alibaba.product.get",
    "app_key": app_key,
    "product_id": product_id,
    "timestamp": str(int(time.time() * 1000)),
    "format": "json",
    "v": "2.0"
}
params["sign"] = generate_sign(params, app_secret)

response = requests.get("https://gw.open.1688.com/openapi/param2/2/portals.open/api/", params=params)
data = response.json()
print(data)

(六)分页数据抓取

如果需要获取店铺全量商品数据,可以使用 alibaba.trade.product.search4trade 接口,并通过分页机制循环获取:

Python

def fetch_all_products(seller_member_id, app_key, app_secret):
    page_no = 1
    all_products = []
    while True:
        params = {
            "method": "alibaba.trade.product.search4trade",
            "app_key": app_key,
            "seller_member_id": seller_member_id,
            "page_no": page_no,
            "page_size": 50,
            "timestamp": str(int(time.time() * 1000)),
            "format": "json",
            "v": "2.0"
        }
        params["sign"] = generate_sign(params, app_secret)
        response = requests.get("https://gw.open.1688.com/openapi/param2/2/portals.open/api/", params=params)
        data = response.json()
        products = data.get("result", {}).get("products", [])
        if not products:
            break
        all_products.extend(products)
        page_no += 1
    return all_products
    

三、注意事项与优化建议

(一)遵守法律法规

在进行爬虫操作时,必须严格遵守相关法律法规,尊重 1688 开放平台的使用协议。

(二)合理设置请求频率

避免过高的请求频率导致对方服务器压力过大,可能触发反爬机制。

(三)数据安全

保护好 API 凭证,避免泄露。

(四)错误处理

在实际开发中,需要对 API 返回的错误码进行处理,例如:

  • 401 Unauthorized:检查 API 凭证是否正确。
  • 429 Too Many Requests:降低请求频率。

四、总结

通过上述步骤和代码示例,你可以高效地利用 Python 爬虫技术获取 1688 店铺的所有商品信息。无论是用于市场调研、竞品分析还是用户体验优化,这些数据都将为你提供强大的支持。希望本文的示例和策略能帮助你在爬虫开发中更好地应对各种挑战,确保爬虫程序的高效、稳定运行。


请登录后查看

one-Jason 最后编辑于2025-09-08 14:03:27

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
打赏
已打赏¥{{reward_price}}
38
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服