BeautifulSoup爬取网页时无法获取div内全部span标签,如何提取薪资数据
问题原因
- 首先检查你写的请求URL存在输入错误:原代码里的URL中
Cairo- Egypt中间多了一个多余空格,会导致请求返回的不是目标岗位的正确页面,优先修正URL后再测试。 - 排除URL错误后,拿不到完整span标签的核心原因是:该站点的薪资数值属于客户端动态渲染内容,初始HTML源码中仅包含固定的Salary标签,薪资数值是页面加载完成后由JavaScript异步加载、计算后插入到DOM中的。requests库只能获取未执行JS的初始静态源码,自然无法抓取到后续动态插入的薪资相关span标签。
解决方法
方案1:使用支持JS渲染的爬取工具(易上手)
用可以模拟浏览器运行、自动执行页面JS的工具(比如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浏览器,需要提前安装对应版本的ChromeDriver driver = webdriver.Chrome() # 修正空格后的目标URL url = "https://wuzzuf.net/jobs/p/xGYIYbJlYhsC-Senior-Python-Developer-Cairo-Egypt?o=1&l=sp&t=sj&a=python|search-v3|hpb" driver.get(url) try: # 等待薪资模块加载完成,最多等10秒 salary_block = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.css-rcl8e5:nth-child(4)")) ) # 直接提取模块完整文本即可拿到薪资信息 print(salary_block.text) finally: # 关闭浏览器 driver.quit()
方案2:抓接口直接获取数据(效率更高)
打开浏览器开发者工具的「网络」面板,筛选XHR/fetch类型的请求,刷新页面后找到返回薪资数据的后端接口,直接模拟请求该接口获取结构化的JSON数据。这种方法不需要启动浏览器,爬取效率更高,适合批量爬取场景。
内容的提问来源于stack exchange,提问作者Mhd O.
相关产品推荐
相关产品推荐

