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

使用BeautifulSoup无法获取id为bbOffers的div元素问题排查

问题分析与解决方案

为什么找不到bbOffers元素?

  • 你用的urllib只能获取页面的静态HTML源码,而bbOffers这个div是页面加载完成后通过JavaScript动态请求接口渲染出来的,静态源码里根本没有这个元素。time.sleep()对urllib完全没用——因为它不会执行页面的JS代码,自然等不到动态内容加载。

解决办法

方案1:用支持JS渲染的工具(推荐)

比如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

url = "https://lubimyczytac.pl/ksiazka/5076165/futeral-o-urzadzaniu-mieszkan-w-prl-u"

# 初始化Chrome浏览器(需提前安装对应版本的ChromeDriver)
driver = webdriver.Chrome()
driver.get(url)

# 等待bbOffers元素加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "bbOffers")))

# 获取渲染后的完整页面源码
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")

bb_offers = soup.find("div", id="bbOffers")
# 提取各书店的名称和价格
for offer in bb_offers.find_all("div", class_="bbOfferItem"):
    store_name = offer.find("div", class_="bbOfferShop").text.strip()
    price = offer.find("div", class_="bbOfferPrice").text.strip()
    print(f"书店:{store_name},价格:{price}")

# 关闭浏览器
driver.quit()

方案2:直接调用后端API

打开浏览器开发者工具(F12)切换到「Network」标签,刷新页面后找加载图书价格的AJAX接口。找到接口后用requests库直接请求,能拿到JSON格式的原始数据,不用解析HTML,效率更高。

注意事项

  • 使用Selenium时,浏览器驱动版本必须和你的浏览器版本匹配。
  • 爬取前请查看网站的robots.txt,确保爬取行为符合规则,避免IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:06:14