Python使用BeautifulSoup爬取网页时定位到的div返回空内容问题求助
问题核心原因
耐克商品页的buyTools区块(包含尺码选择、库存等信息)是客户端JavaScript动态渲染生成的,你用requests发起请求拿到的原始HTML源码中,对应的<div class="pr16-sm pr10-lg">本身就是空节点,内容是浏览器加载页面后执行JS才填充的,所以直接用BeautifulSoup解析静态HTML无法获取目标内容。
先修正你现有代码的语法错误
你当前的代码存在几处基础语法问题,需要先调整:
- 函数定义关键字拼写错误,
dev改为def - 异常捕获关键字拼写错误,
excpet改为except - 调用
make_soup时传入的URL没有加字符串引号 - 没有导入
requests、BeautifulSoup依赖包
可行的解决方案
方案1:使用模拟浏览器工具获取渲染后的DOM
用支持JS渲染的工具(如Selenium、Playwright)启动浏览器访问页面,等页面渲染完成后再提取内容,示例逻辑如下(以Selenium为例):
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 driver = webdriver.Chrome() url = "https://www.nike.com/de/t/air-jordan-1-low-se-damenschuh-RxZs2k/DO0750-002" driver.get(url) # 等待目标fieldset加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "form#buyTools fieldset")) ) # 直接提取目标内容 target_div = driver.find_element(By.CSS_SELECTOR, "form#buyTools div.mt2-sm.css-12whm6") print(target_div.text) driver.quit()
方案2:直接调用后端数据接口
打开浏览器开发者工具的「网络」面板,筛选「Fetch/XHR」请求,刷新页面后找到返回商品尺码、库存信息的后端接口,直接请求该接口解析JSON即可,这种方式比爬页面效率更高、稳定性更好。
内容的提问来源于stack exchange,提问作者jw-de
相关产品推荐
相关产品推荐

