Python招聘门户爬取求助:无法提取职位标题等核心信息
招聘门户站点爬取求助
背景
我刚开始学习用Python爬招聘门户站点,目前写了以下代码:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome('C:/Users/ - Home/Desktop/Web Scraper/chromedriver.exe') driver.get('https://www.mycareersfuture.gov.sg/search?sortBy=relevancy&page=0') results =[] content = driver.page_source soup = BeautifulSoup(content, 'html.parser') listing= soup.find('div', class_ = 'card-list') job = listing.find('p') print(job)
问题
我无法从职位卡片中提取以下信息:
- 职位标题(Job title)
- 公司名称(Company name)
- 薪资(Salary)
查了很多教程,大多说找h2标签或对应类的div,但目标站点结构不一样。比如职位标题的HTML结构如下,我尝试提取却失败:
<span data-cy="job-card__job-title" class="f4-5 fw6 mv0 dib mr2 brand-sec JobCard__jobtitle___3HqOw" style="overflow-wrap: break-word;">2402 - IT Manager [ Amber Rd / / 5 days ]</span>
解决方案
修改后的代码
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 初始化浏览器 driver = webdriver.Chrome('C:/Users/ - Home/Desktop/Web Scraper/chromedriver.exe') driver.get('https://www.mycareersfuture.gov.sg/search?sortBy=relevancy&page=0') # 等待页面加载完成(避免未加载完就获取源码) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'card-list__item')) ) # 获取页面源码并解析 content = driver.page_source soup = BeautifulSoup(content, 'html.parser') # 找到所有职位卡片 job_cards = soup.find_all('div', class_='card-list__item') results = [] # 遍历每个卡片提取信息 for card in job_cards: # 用data-cy属性定位,比class更稳定 job_title = card.find('span', attrs={'data-cy': 'job-card__job-title'}).text.strip() company_name = card.find('span', attrs={'data-cy': 'job-card__company-name'}).text.strip() salary = card.find('span', attrs={'data-cy': 'job-card__salary'}).text.strip() results.append({ '职位标题': job_title, '公司名称': company_name, '薪资': salary }) # 转成DataFrame并输出 df = pd.DataFrame(results) print(df) # 关闭浏览器 driver.quit()
关键说明
- 等待页面加载:加入
WebDriverWait确保职位卡片加载完成后再解析,避免因页面未加载完全导致找不到元素。 - 稳定定位元素:使用
data-cy属性而非class定位元素,站点的class名称可能带随机哈希值(比如JobCard__jobtitle___3HqOw)容易变化,而data-cy是专为测试/爬虫设计的稳定属性。 - 遍历所有卡片:用
find_all获取所有职位卡片,再逐个提取每个卡片内的信息,而非仅定位单个元素。
内容的提问来源于stack exchange,提问作者DepthVader
相关产品推荐
相关产品推荐

