非标准HTML表格转机器可读格式的技术方案咨询
问题解答
关于定制代码与现成工具
这类需求不需要编写大量定制化代码,但需要针对性的小范围开发;现成工具可选用,但灵活性有限:
- 可视化爬虫工具(如Octoparse、ParseHub):适合无代码基础场景,通过点选配置提取规则,但如果网页结构有细微变动(比如字段位置调整),维护成本可能比代码更高。
- 通用HTML转CSV工具:大多只支持标准
<table>标签,你这个是用<div>模拟的表格结构,这类工具大概率无法精准提取目标字段。
因此更推荐用代码实现,尤其是你考虑的Beautiful Soup,开发成本低且可控性强。
Beautiful Soup 实现方向
核心思路:遍历每个独立条目(<li class="searchResult">),提取条目内的所有目标字段,最后批量写入CSV文件。
具体步骤与代码示例
- 导入依赖:用
BeautifulSoup解析HTML,csv模块处理文件写入。 - 遍历条目:定位所有
searchResult类的<li>标签,每个标签对应CSV的一行数据。 - 精准提取字段:针对每个条目内的子节点,拆分提取所需内容:
- 职位名称:从
<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
相关产品推荐
相关产品推荐

