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

Python网页爬取薪资时返回None值问题求助

解决Wuzzuf薪资爬取返回None的问题

核心原因及解决方案

1. 缺少请求头被反爬拦截

Wuzzuf会识别无浏览器标识的请求,默认requests.get()的请求头会被判定为爬虫,导致返回的页面不包含完整内容。

修改代码添加请求头:

import requests
from bs4 import BeautifulSoup

url = "https://wuzzuf.net/jobs/p/KxrcG1SmaBZB-Facility-Administrator-Majorel-Egypt-Alexandria-Egypt?o=1&l=sp&t=sj&a=search-v3"
# 添加浏览器UA模拟正常访问
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'
}

link_content = requests.get(url, headers=headers)
soup = BeautifulSoup(link_content.text, 'html.parser')

# 优先通过文本定位薪资标签(兼容性更强)
salary_label = soup.find('span', string=lambda t: t and 'Salary' in t)
if salary_label:
    salary_element = salary_label.find_next_sibling('span')
    print(salary_element.text.strip() if salary_element else "薪资信息未找到")
else:
    # 备用:直接查找薪资所在的class(注意页面更新可能导致class变化)
    salary_element = soup.find("span", class_="css-2iqe2o")
    print(salary_element.text.strip() if salary_element else "薪资信息未找到")

2. 元素选择器失效

网站可能更新了页面结构,原有的css-47jx3m类名已变更。可以通过浏览器开发者工具(F12)重新定位薪资元素:

  • 右键点击薪资文本 → 检查,查看对应的HTML标签和class
  • 替换代码中的选择器为最新的标识

3. 薪资内容动态加载

如果上述方法仍无法获取,可能薪资是通过JavaScript动态渲染的。此时需要使用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()
driver.get(url)

# 等待薪资元素加载完成
try:
    salary_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//span[contains(text(),'Salary')]/following-sibling::span"))
    )
    print(salary_element.text.strip())
finally:
    driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:03:17