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

Python BeautifulSoup循环爬取多页数据时列表仅保留最后一页结果的问题求助

问题分析

你遇到的问题核心有两个:

  • 元素选择器不准确:当前使用的mainAttributes__09f24__26-vh arrange-unit__09f24__3IxLD arrange-unit-fill__09f24__1v_h4 border-color--default__09f24__1eOdn这个冗长的动态class组合,可能会随页面分页发生变化,导致前几页无法匹配到任何商家元素,只有最后一页能抓取到内容,最终列表只保留最后一页数据。
  • 未处理变量未定义异常:当main.find()失败时,gymname变量未被赋值,直接执行append会引发NameError——只是你运行时可能前几页没触发这个错误,或者错误被隐性忽略了。
修复方案

1. 使用更稳定的元素选择器

放弃依赖易变的长class组合,改用更通用的选择逻辑:直接定位商家名称的<a>标签(这类标签的css-166la90类在分页中更稳定),也可以先定位商家卡片容器再提取名称。

2. 初始化变量避免未定义错误

每次处理单个商家时,先将gymname初始化为None,确保即使抓取失败也能正常添加到列表中,不会中断程序。

3. 简化翻页逻辑(可选)

你的翻页逻辑是正确的,但可以简化流程,不需要额外的params列表,直接在循环中计算start参数即可。

修复后的代码
from bs4 import BeautifulSoup as bs
import requests

# 初始化存储列表(放在循环外,确保不会被重置)
gymname_list = []

# 直接循环4页,计算start参数(对应0,10,20,30)
for page_number in range(4):
    start = page_number * 10
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'}
    url = f'https://www.yelp.com.au/search?find_desc=gyms&find_loc=Berlin%2C%20Germany&start={start}'
    
    # 请求页面,主动抛出请求错误方便排查
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    page_soup = bs(response.content, 'lxml')
    
    # 使用更稳定的选择器:直接定位所有商家名称的a标签
    gym_name_tags = page_soup.find_all("a", {"class": "css-166la90"})
    
    for tag in gym_name_tags:
        gymname = None
        try:
            gymname = tag.text.strip()  # 去除文本前后多余空格
            print(gymname)
        except Exception as e:
            print(f"抓取名称失败: {e}")
        gymname_list.append(gymname)

# 验证最终结果
print(f"\n总共抓取到 {len(gymname_list)} 个健身房名称")
print(gymname_list)
额外建议
  • 添加请求延时:频繁请求可能触发Yelp的反爬机制,建议在每次请求后添加time.sleep(2)(需导入time模块),降低请求频率。
  • 定期检查页面结构:如果Yelp更新了页面class,可通过浏览器开发者工具(F12)重新定位元素选择器。
  • 异常捕获细化:可以针对特定异常(比如AttributeError)进行捕获,让错误排查更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:37:48