使用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:用浏览器模拟工具(推荐)
如果是动态渲染的问题,用selenium或playwright模拟浏览器加载页面,就能拿到完整的渲染后的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




