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

使用BeautifulSoup查找指定class元素返回None或空列表问题求助

问题原因分析
  • 缺少请求头伪装:直接用requests.get()默认的UA标识会被目标站点识别为爬虫,返回的页面内容缺失对应元素或者直接返回拦截页,所以find查询返回None
  • 链接未拼接域名:从列表页抓取的href属性是相对路径(格式为/jobs/p/xxx),直接请求相对路径会报404,无法拿到正确的岗位详情页内容
  • 未做空值兼容:不是所有岗位都会公开薪资信息,就算页面正常加载,也可能不存在对应类名的span标签,需要提前做异常兼容
  • 取值逻辑遗漏:原代码直接把soup找到的tag对象存入列表,没有取text属性,就算拿到元素也会是标签对象而非薪资文本
修正后的可运行代码
import requests
from bs4 import BeautifulSoup

# 全局配置
BASE_URL = "https://wuzzuf.net"
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

list_jobs = []
links = []
list_companies = []
list_locations = []
list_skills = []
list_salaries = []

# 列表页抓取逻辑保持不变,仅修改链接拼接部分
for i in range(len(job_titles)):
    list_jobs.append(job_titles[i].text)
    # 拼接相对路径为完整可访问链接
    raw_link = job_titles[i].find("a").attrs["href"]
    full_link = BASE_URL + raw_link if raw_link.startswith("/") else raw_link
    links.append(full_link)
    list_companies.append(company_names[i].text)
    list_locations.append(locations[i].text)
    list_skills.append(job_skills[i].text)

for link in links:
    # 请求添加伪装头
    result = requests.get(link, headers=HEADERS)
    # 校验请求状态,异常直接跳过
    if result.status_code != 200:
        list_salaries.append("页面获取失败")
        continue
    src = result.content
    soup = BeautifulSoup(src, "lxml")
    salaries_tag = soup.find('span' , {'class' : 'css-4xky9y'})
    # 空值兼容处理
    if salaries_tag:
        salaries = salaries_tag.text.strip()
        list_salaries.append(salaries)
        print(salaries)
    else:
        list_salaries.append("薪资未公开")
        print("薪资未公开")
补充说明
  • 如果添加UA后还是拿不到元素,可以打印result.text搜索类名css-4xky9y是否存在,确认是反爬拦截还是元素类名发生了变更
  • 如果站点内容是JS动态渲染的,普通requests请求拿不到渲染后的内容,可以替换为selenium模拟浏览器加载页面后再解析

内容的提问来源于stack exchange,提问作者S.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:54:01