使用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
相关产品推荐
相关产品推荐

