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

使用BeautifulSoup爬取网页时容器及数字加载异常求助

解决动态页面爬取数据缺失问题

你遇到的问题是典型的动态渲染页面爬取障碍:requests只能获取页面的静态HTML源码,而页面里的部分容器和数字(比如你提到的228)是通过JavaScript异步加载或渲染的,这部分内容不会出现在静态响应里,自然用BeautifulSoup解析不到。

下面给你两种可行的解决办法:

方法一:用浏览器自动化工具(Selenium)模拟加载

Selenium会真实打开浏览器,等待页面JS执行完成后再获取完整的页面内容,能直接拿到开发者工具里看到的所有元素。

代码示例

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
from bs4 import BeautifulSoup

# 初始化Chrome浏览器(需提前下载对应版本的chromedriver)
driver = webdriver.Chrome()
try:
    # 访问目标页面
    driver.get("https://k.autohome.com.cn/5213/16665#pvareaid=3454637")
    # 等待目标容器加载完成(替换成你要找的容器类名/ID)
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "target-container-class"))
    )
    # 获取完整渲染后的页面源码
    page_source = driver.page_source
    # 用BeautifulSoup解析
    soup = BeautifulSoup(page_source, 'lxml')
    print(soup.prettify())
finally:
    # 关闭浏览器
    driver.quit()

方法二:直接爬取AJAX接口(更高效)

大部分动态内容是通过AJAX请求后端接口获取的,你可以在开发者工具里找到这些接口,直接请求拿到结构化的JSON数据,比浏览器自动化速度更快、资源消耗更低。

操作步骤

  1. 打开浏览器开发者工具(F12),切换到「网络」标签页后刷新页面。
  2. 筛选「XHR」或「Fetch」类型的请求,逐一查看响应内容,找到包含目标数字的接口。
  3. 复制该接口的URL,添加必要的请求头(比如User-Agent、Referer)后,用requests直接请求并解析JSON。

代码示例(假设找到的接口URL如下)

import requests

# 替换为你找到的AJAX接口地址
api_url = "https://xxx.autohome.com.cn/api/xxx"
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",
    "Referer": "https://k.autohome.com.cn/5213/16665#pvareaid=3454637"
}
response = requests.get(api_url, headers=headers)
data = response.json()
# 从JSON中提取你需要的数字或内容
print(data)

优先推荐方法二,若接口存在复杂签名验证,再考虑用Selenium模拟浏览器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:50:37