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

非标准HTML表格转机器可读格式的技术方案咨询

问题解答

关于定制代码与现成工具

这类需求不需要编写大量定制化代码,但需要针对性的小范围开发;现成工具可选用,但灵活性有限:

  • 可视化爬虫工具(如Octoparse、ParseHub):适合无代码基础场景,通过点选配置提取规则,但如果网页结构有细微变动(比如字段位置调整),维护成本可能比代码更高。
  • 通用HTML转CSV工具:大多只支持标准<table>标签,你这个是用<div>模拟的表格结构,这类工具大概率无法精准提取目标字段。

因此更推荐用代码实现,尤其是你考虑的Beautiful Soup,开发成本低且可控性强。

Beautiful Soup 实现方向

核心思路:遍历每个独立条目(<li class="searchResult">),提取条目内的所有目标字段,最后批量写入CSV文件。

具体步骤与代码示例

  1. 导入依赖:用BeautifulSoup解析HTML,csv模块处理文件写入。
  2. 遍历条目:定位所有searchResult类的<li>标签,每个标签对应CSV的一行数据。
  3. 精准提取字段:针对每个条目内的子节点,拆分提取所需内容:
    • 职位名称:从<a>标签中提取文本
    • 通知日期、等待期结束日期:拆分第一个tableCell内的<br>分隔内容,提取冒号后的值
    • 公司名称、地点:第一个tableCell内的后两行文本(匹配你的示例结构)
    • PB编号:第二个tableCell的第一行文本
    • 选拔流程编号:第二个tableCell内<span>的文本
    • 候选人姓名:最后一个<div>内<strong>之后的文本

代码示例:

from bs4 import BeautifulSoup
import csv

# 假设已获取网页HTML内容并存储在html变量中
soup = BeautifulSoup(html, 'html.parser')

# 定义CSV表头
csv_headers = [
    "职位名称", "通知日期", "等待期结束日期", 
    "公司名称", "地点", "PB编号", "选拔流程编号", "候选人姓名"
]

# 打开CSV文件准备写入
with open('result.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=csv_headers)
    writer.writeheader()

    # 遍历每个搜索结果条目
    for result in soup.find_all('li', class_='searchResult'):
        # 提取职位名称
        job_title = result.find('a').get_text(strip=True)
        
        # 处理第一个tableCell的内容
        first_cell = result.find('div', class_='tableCell')
        cell_lines = [line.strip() for line in first_cell.stripped_strings]
        # 拆分日期字段
        notify_date = cell_lines[0].split(':')[1].strip()
        wait_end_date = cell_lines[1].split(':')[1].strip()
        company_name = cell_lines[2]
        location = cell_lines[3]
        
        # 处理第二个tableCell的内容
        second_cell = first_cell.find_next_sibling('div', class_='tableCell')
        pb_number = second_cell.stripped_strings.__next__()
        process_id = second_cell.find('span').get_text(strip=True)
        
        # 提取候选人姓名
        candidate_name = result.find('div', string=lambda text: text and 'Name of person being considered' in text).next_sibling.strip()
        
        # 写入一行数据
        writer.writerow({
            "职位名称": job_title,
            "通知日期": notify_date,
            "等待期结束日期": wait_end_date,
            "公司名称": company_name,
            "地点": location,
            "PB编号": pb_number,
            "选拔流程编号": process_id,
            "候选人姓名": candidate_name
        })

注意事项

  • 如果网页是动态加载(如滚动加载更多条目),需结合requests+selenium或requests-html获取完整HTML。
  • 要处理字段缺失的情况:比如某条目无选拔流程编号,需添加判断逻辑避免报错。
  • 测试时先拿少量条目验证提取逻辑,再批量处理数千个条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:05:21