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

Python爬虫问题:For循环未识别If-Else,无法输出10条薪资结果

问题分析

你的代码主要有两个核心问题,导致只返回了2条结果:

1. else语句的绑定逻辑错误

你写的else是和for c in salary循环绑定的,而非用来判断salary是否为空。当salary为空时,循环不会执行,直接走到else分支只添加一次Nothing_found;而不是为每个无薪资的职位都补充该值。

2. 遍历对象偏离目标

当前代码只在存在薪资模块的职位里循环查找,完全忽略了那些没有salarySnippet元素的职位。Indeed的职位卡片中,只有部分职位会显示薪资,你的代码没有遍历所有职位条目,自然无法收集到10条结果。


修正方案

我们调整逻辑:先定位页面上所有的职位卡片,再逐个检查每个职位是否包含薪资信息,这样就能保证输出10条对应结果。

import requests
from bs4 import BeautifulSoup

URL = 'https://www.indeed.com/jobs?q=data+scientist+%2485%2C000&l=New+York'
page = requests.get(URL)
soup = BeautifulSoup(page.text, 'html.parser')

def extract_salary_from_result(soup):
    salaries = []
    # 先定位所有职位卡片(Indeed职位卡片的核心类是jobsearch-SerpJobCard)
    job_cards = soup.find_all('div', class_='jobsearch-SerpJobCard')
    
    for card in job_cards:
        # 检查当前职位卡片是否包含薪资元素
        salary_elem = card.find('span', class_='salary no-wrap')
        if salary_elem:
            salaries.append(salary_elem.text.strip())
        else:
            salaries.append('Nothing_found')
        # 控制最多返回10条结果,匹配你的需求
        if len(salaries) >= 10:
            break
    return salaries

salary = extract_salary_from_result(soup)
print('salary is: ', salary)

代码说明
  • 先遍历所有职位卡片,确保不会漏掉任何一个职位
  • 对每个职位单独判断薪资是否存在:存在则提取文本,不存在则添加Nothing_found
  • 增加长度判断,保证最终结果最多为10条,符合你的预期

执行这段代码后,就能得到你想要的包含10条元素的列表,有薪资的职位显示具体数值,无薪资的职位显示Nothing_found。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:21:32