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

如何用BeautifulSoup批量爬取TimesJobs页面所有公司的招聘信息?

解决TimesJobs职位信息爬取仅获取第一条数据的问题

问题根源

你的代码中使用 soup.find_all('ul',class_="new-joblist") 只会拿到一个包含所有职位的外层容器,而非每个单独的职位条目。因此循环遍历的是这个单一容器,自然只能提取到第一条数据。

修正后的代码

import requests
from bs4 import BeautifulSoup

url = "https://www.timesjobs.com/candidate/job-search.html?searchType=personalizedSearch&from=submit&txtKeywords=Machine+Learning&txtLocation="
page = requests.get(url)
soup = BeautifulSoup(page.content, 'lxml')

# 定位每个单独的职位条目(li元素)
job_items = soup.find_all('li', class_="clearfix job-bx wht-shd-bx")

all_jobs = []

for job in job_items:
    job_data = {}
    
    # 提取公司名称
    company_name = job.find('h3', class_="joblist-comp-name")
    job_data['company_name'] = company_name.get_text(strip=True) if company_name else "N/A"
    
    # 提取职位描述
    job_desc = job.find('ul', class_="list-job-dtl clearfix")
    job_data['job_description'] = job_desc.get_text(strip=True) if job_desc else "N/A"
    
    # 提取工作年限和地点
    top_details = job.find('ul', class_="top-jd-dtl clearfix")
    if top_details:
        details = top_details.find_all('li')
        if len(details) >= 2:
            # 处理工作年限
            experience_text = details[0].get_text(strip=True)
            job_data['experience'] = experience_text.split('Yrs')[0].strip() if 'Yrs' in experience_text else "N/A"
            # 处理工作地点
            location_text = details[1].get_text(strip=True)
            job_data['location'] = location_text.replace('location', '').strip() if 'location' in location_text else "N/A"
    
    # 提取关键技能
    key_skills = job.find('span', class_="srp-skills")
    job_data['key_skills'] = key_skills.get_text(strip=True) if key_skills else "N/A"
    
    all_jobs.append(job_data)

# 打印所有职位信息
for idx, job in enumerate(all_jobs, 1):
    print(f"职位 {idx}:")
    print(f"公司名称: {job['company_name']}")
    print(f"工作地点: {job['location']}")
    print(f"工作年限: {job['experience']}")
    print(f"关键技能: {job['key_skills']}")
    print(f"职位描述: {job['job_description']}\n")

关键修改点

  • 定位职位条目: 使用 find_all('li', class_="clearfix job-bx wht-shd-bx") 获取每个独立的职位卡片,而非外层的容器。
  • 字段提取优化: 用 get_text(strip=True) 清理文本冗余内容,并添加空值判断避免因元素缺失导致的报错。
  • 数据结构化: 将每个职位的信息存入字典,再收集到列表中,方便后续批量处理或输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:45:42