You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bs4爬取Shopify数据时第二页重复第一页内容的问题

Shopify爬虫第二页数据重复问题解决方法

常见问题原因及修复方案

1. 分页URL参数未更新

大部分Shopify站点通过page参数控制分页,比如xxx.com/collections/nuts?page=2。如果你的代码每次请求的都是第一页的固定URL,自然只会拿到重复数据。

修复代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd

base_url = "https://你的目标站点.com/collections/nuts"
data_list = []

# 循环爬取1-2页
for page_num in range(1, 3):
    # 动态拼接带page参数的URL
    target_url = f"{base_url}?page={page_num}"
    resp = requests.get(target_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/114.0.0.0 Safari/537.36"})
    soup = BeautifulSoup(resp.text, "html.parser")
    
    # 替换为你实际的商品解析逻辑
    products = soup.find_all("div", class_="product-item")
    for item in products:
        name = item.find("h2").text.strip()
        price = item.find("span", class_="price").text.strip()
        data_list.append({"商品名称": name, "价格": price})

df = pd.DataFrame(data_list)
print(df)

2. 站点采用AJAX动态加载数据

有些Shopify站点不会在URL上显示分页参数,而是通过products.json接口返回数据。这种情况下直接请求HTML页面,服务器只会返回第一页的静态内容。

修复代码示例:

import requests
import pandas as pd

base_api = "https://你的目标站点.com/collections/nuts/products.json"
data_list = []

# 循环请求API分页数据
for page_num in range(1, 3):
    params = {"page": page_num, "limit": 20}  # limit控制每页数量,Shopify默认20
    resp = requests.get(base_api, params=params, headers={"User-Agent": "Mozilla/5.0"})
    product_json = resp.json()["products"]
    
    for product in product_json:
        name = product["title"]
        price = product["variants"][0]["price"]
        data_list.append({"商品名称": name, "价格": price})

df = pd.DataFrame(data_list)
print(df)

3. 请求头缺失导致缓存返回

部分站点会根据请求头(比如User-Agent)识别请求,若请求头过于简单,服务器可能返回缓存的第一页内容。

解决:在请求中添加标准浏览器请求头,示例如下:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
resp = requests.get(target_url, headers=headers)

4. 下一页链接解析错误

如果是通过页面内的“下一页”按钮链接跳转,可能是选择器定位错误,拿到的还是第一页的链接。

解决:用浏览器开发者工具定位下一页的a标签,确认class或属性后调整选择器,示例:

next_page_tag = soup.find("a", class_="pagination-next")
if next_page_tag:
    next_url = "https://你的目标站点.com" + next_page_tag["href"]
else:
    print("没有下一页了")

内容的提问来源于stack exchange,提问作者Bek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:12:59