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

BeautifulSoup仅抓取第一页求助:多页重复获取首页内容

解决爬取时重复获取第一页内容的问题

问题根源

你遇到的情况是典型的反爬拦截:浏览器访问时会自动携带User-Agent、会话Cookie等请求头信息,服务器靠这些识别正常用户;而requests.get()默认的请求头过于简单,被服务器判定为非正常访问,直接返回默认的第一页内容,不管你修改page参数还是抓下一页链接都没用。

另外,抓下一页链接的代码还有个小问题:页面里的href大概率是相对路径,直接赋值给next_page会导致请求地址错误。

解决方案

  1. 添加模拟浏览器的请求头:至少要带上User-Agent,最好复制浏览器访问该页面时的Cookie(从浏览器开发者工具的Network面板获取)。
  2. 处理相对路径:用urllib.parse.urljoin把页面里的相对链接拼接成完整URL。
  3. 验证请求有效性:每次请求后打印响应状态码和URL,确认服务器是否返回了目标页面。

修改后的代码示例

方案1:通过URL参数遍历页面

import requests
from bs4 import BeautifulSoup

# 替换成你浏览器的真实请求头,从Network面板复制
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Cookie': '这里替换成你浏览器访问该页面时的Cookie内容'
}

product_links = []
# 测试爬取前2页,实际替换为page_count对应的范围
for count in range(1, 3):
    page_url = f'https://www.bargainw.com/wholesale/1082/Wholesale-Products.html?sort=&size=100&page={count}&sortBy='
    product_response = requests.get(page_url, headers=headers, timeout=3)
    
    # 打印请求状态和URL,排查问题
    print(f"请求状态码:{product_response.status_code},当前请求URL:{product_response.url}")
    
    soup = BeautifulSoup(product_response.text, 'html5lib')
    products = soup.find_all('div', class_='product_name')

    print('-'*200)
    print(f'正在打印 {page_url} 的内容')
    print('-'*200)
    for product in products:
        print(count, product.contents[1])
        product_links.append(product.contents[1].get('href'))

方案2:抓取下一页按钮链接

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Cookie': '这里替换成你浏览器访问该页面时的Cookie内容'
}

base_url = 'https://www.bargainw.com'
next_page = '/wholesale/1082/Wholesale-Products.html?sort=&size=100&page=1&sortBy='
product_links = []

# 测试爬取前2页,实际替换为page_count对应的范围
for count in range(1, 3):
    full_url = urljoin(base_url, next_page)
    product_response = requests.get(full_url, headers=headers, timeout=3)
    
    print(f"请求状态码:{product_response.status_code},当前请求URL:{product_response.url}")
    
    soup = BeautifulSoup(product_response.text, 'html5lib')
    products = soup.find_all('div', class_='product_name')

    print('-'*200)
    print(f'正在打印 {full_url} 的内容')
    print('-'*200)
    for product in products:
        print(count, product.contents[1])
        product_links.append(product.contents[1].get('href'))
    
    # 获取下一页链接并处理相对路径
    next_page_tag = soup.find('a', class_='pageNavLink pageNavNext')
    if next_page_tag:
        next_page = next_page_tag.get('href')
    else:
        print('已到最后一页,停止爬取')
        break

额外提示

  • Cookie可能会过期,需要定期从浏览器更新;也可以先请求一次首页,保存响应的cookies对象,后续请求复用。
  • 不要过度频繁请求,可添加time.sleep(1)控制间隔,避免被封IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:43:08