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
相关产品推荐
相关产品推荐

