You need to enable JavaScript to run this app. 使用BeautifulSoup爬取网站时find_all返回空列表该如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup爬取网站时find_all返回空列表该如何解决?

BeautifulSoup爬取返回空列表修复方案

核心原因

Monster站点的岗位列表为JavaScript动态渲染内容,requests.get()仅能获取未执行JS的初始静态HTML,此时results-list节点尚未生成,因此匹配结果为空。

可落地修复方案

方案1:使用动态渲染工具模拟浏览器加载

采用Selenium等工具模拟真实浏览器运行,等待JS执行完成后再解析DOM,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

URL = 'https://www.monster.com/jobs/search/?q=Software-Developer&where=Australia'
# 配置无头模式,无需弹出浏览器界面
chrome_options = Options()
chrome_options.add_argument("--headless=new")

driver = webdriver.Chrome(options=chrome_options)
driver.get(URL)
# 等待页面资源加载完成,可替换为显式等待提高效率
driver.implicitly_wait(10)

soup = BeautifulSoup(driver.page_source, 'lxml')
container = soup.find_all('div', class_="results-list")
print(container)

driver.quit()

方案2:直接调用后端数据接口

打开浏览器开发者工具的「网络」面板,筛选XHR/Fetch类型请求,找到返回岗位列表数据的后端接口,直接用requests调用接口获取结构化JSON数据,该方案执行效率远高于模拟浏览器。

其他通用排查思路

如果爬取的是静态页面仍返回空列表,可先打印page.text查看返回的原始HTML内容:

  • 确认是否触发了站点反爬机制,返回了验证码、403错误页等异常内容
  • 核对目标节点的类名、标签名是否和实际HTML中的定义一致,避免拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:45:04