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

如何抓取GitHub中.md文件的职位列表并导出为CSV?

解决方案

1. 定位目标UL元素

GitHub上的目标职位列表位于标题Companies that don't do whiteboard interviews下方的<ul>中,我们可以通过先定位该标题,再获取其后续的<ul>来精准定位目标列表:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 获取页面内容
url = 'https://github.com/poteto/hiring-without-whiteboards/blob/master/README.md'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 定位目标标题及对应的UL
target_heading = soup.find('h2', string="Companies that don't do whiteboard interviews")
target_ul = target_heading.find_next('ul')

2. 提取A标签、位置与描述文本

每个<li>的结构为<a>公司名</a> | 位置 | 描述,我们可以通过以下步骤拆分内容:

  • 提取<a>标签的文本(公司名)和链接
  • 移除<li>中<a>标签的文本,剩余内容按|分割,分别提取位置和描述(处理部分条目无描述的情况)
data_list = []
for li in target_ul.find_all('li'):
    # 提取A标签信息
    a_tag = li.find('a')
    if not a_tag:
        continue  # 跳过无A标签的条目
    
    a_text = a_tag.get_text(strip=True)
    a_href = a_tag['href']
    
    # 拆分位置与描述
    # 移除A标签文本后处理剩余内容
    remaining_text = li.get_text(strip=True).replace(a_text, '', 1).strip()
    parts = [p.strip() for p in remaining_text.split('|') if p.strip()]
    
    location = parts[0] if len(parts) >= 1 else ''
    description = ' | '.join(parts[1:]) if len(parts) >= 2 else ''
    
    # 存入数据列表
    data_list.append({
        'A标签文本': a_text,
        'A标签链接': a_href,
        '位置': location,
        '描述': description
    })

3. 用Pandas导出CSV

Pandas可以快速将结构化数据导出为CSV,只需将数据列表转为DataFrame,指定列后导出即可:

# 转为DataFrame
df = pd.DataFrame(data_list)

# 按需求调整列顺序(此处以A标签文本为例,若需链接可替换为'A标签链接')
output_df = df[['A标签文本', '位置', '描述']]

# 导出CSV
output_df.to_csv('github职位列表.csv', index=False, encoding='utf-8-sig')

关键说明

  • 定位目标UL时,利用标题与列表的紧邻关系,避免误抓其他无关<ul>
  • 拆分文本时通过replace移除A标签文本,再按|分割,同时处理空值情况,保证数据完整性
  • Pandas简化了CSV导出流程,自动处理编码、列对齐等问题,比手动写入CSV更高效可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14