You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python BeautifulSoup提取Steam页面总页数时返回空列表求助

解决Steam页面总页数提取失败的问题

嘿,我之前爬Steam页面的时候也碰到过类似的坑,来帮你分析下为啥拿不到paged_items_paging_pagelink元素,以及怎么搞定总页数提取:

可能的核心原因

  • 页面是JS动态渲染的:Steam很多列表页面(比如商店搜索结果、创意工坊)的分页元素是通过JavaScript动态生成的。如果你用requests这类静态HTTP请求库,拿到的只是初始HTML,根本没有渲染后的分页DOM,自然找不到目标类。
  • CSS类名已变更:Steam偶尔会调整页面的样式类名,你得再手动核对下当前页面的实际元素类名。打开浏览器F12开发者工具,定位到分页按钮,看看它的class属性是不是真的叫paged_items_paging_pagelink
  • 页面结构差异:不同类型的Steam页面(库存、商店、社区)分页逻辑可能不一样,你得确认自己爬的页面和案例中的页面结构是否一致。

可行的解决方案

方案1:用浏览器模拟工具(推荐)

如果是动态渲染的问题,用seleniumplaywright模拟浏览器加载页面,就能拿到完整的渲染后的DOM:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器(这里用Chrome,需要对应版本的driver)
driver = webdriver.Chrome()
driver.get("你要爬取的Steam页面URL")

# 等待分页元素加载完成(最多等10秒)
wait = WebDriverWait(driver, 10)
page_elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "paged_items_paging_pagelink")))

# 提取最后一个页码作为总页数
if page_elements:
    total_pages = page_elements[-1].text
    print(f"总页数:{total_pages}")  # 应该能返回11
else:
    print("未找到分页元素,请检查类名或页面加载方式")

driver.quit()

方案2:直接请求Steam的API接口

Steam很多页面的数据是通过AJAX接口返回的,你可以在浏览器Network面板里找XHR请求,找到包含分页信息的接口(通常返回JSON格式),直接解析接口数据更稳定:
比如找到类似这样的接口响应:

{
  "total_count": 105,
  "per_page": 10,
  "pages": 11
}

直接用requests请求这个接口,就能直接拿到pages字段的值,不用解析HTML。

方案3:重新核对元素定位

如果类名确实变了,就用新的定位方式。比如现在分页按钮可能用的是pagebtn类,或者通过aria-label属性定位:

# 示例:通过文本内容定位最后一页按钮
last_page_btn = driver.find_element(By.XPATH, "//a[contains(text(), '最后一页')]")
total_pages = last_page_btn.get_attribute("data-page")

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

火山引擎 最新活动