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

