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

如何用Python从网页提取人员联系URL并写入CSV文件

需求与问题

需要从Fairfax高中员工目录页面提取每位人员的姓名、职位和专属联系页面URL,存入CSV文件,点击Contact列的URL可直接跳转至对应联系人页面。目前已实现姓名和职位提取,但联系URL的提取功能待完善,且原代码存在循环逻辑错误。

修改后的完整代码

import requests
from bs4 import BeautifulSoup
from csv import writer

# 初始化CSV文件并写入表头
with open('FCPS.csv', 'w', encoding='utf8', newline='') as csv_file:
    writer_obj = writer(csv_file)
    writer_obj.writerow(['Name', 'Position', 'Contact'])

# 遍历所有目标页面(共30页)
for page_num in range(0, 30):
    target_url = f'https://fairfaxhs.fcps.edu/staff-directory?field_last_name_from=&field_last_name_to=&items_per_page=10&keywords=&page={page_num}'
    response = requests.get(target_url)
    response.raise_for_status()  # 捕获页面请求失败的异常
    soup = BeautifulSoup(response.content, 'html.parser')
    staff_rows = soup.find_all('tr')
    
    # 跳过表头行,处理员工数据行
    for row in staff_rows[1:]:
        # 提取姓名
        name_cell = row.find('td', class_='views-field views-field-field-last-name')
        name = name_cell.text.strip() if name_cell else 'N/A'
        
        # 提取职位
        position_cell = row.find('td', class_='views-field views-field-field-staff-title')
        position = position_cell.text.strip() if position_cell else 'N/A'
        
        # 提取联系页面完整URL
        contact_cell = row.find('td', class_='views-field views-field-rendered-item')
        if contact_cell:
            link_tag = contact_cell.find('a')
            if link_tag and link_tag.get('href'):
                # 拼接相对路径为完整URL
                contact_url = f'https://fairfaxhs.fcps.edu{link_tag["href"]}'
            else:
                contact_url = 'N/A'
        else:
            contact_url = 'N/A'
        
        # 将当前员工数据追加写入CSV
        with open('FCPS.csv', 'a', encoding='utf8', newline='') as csv_file:
            writer_obj = writer(csv_file)
            writer_obj.writerow([name, position, contact_url])

核心修改说明

  • 循环逻辑修正:把页面解析、数据提取逻辑放到分页循环内部,确保每一页数据都被处理;表头写入单独放在循环外,避免重复生成表头。
  • 联系URL提取:定位到包含联系入口的单元格后,抓取其中的<a>标签,获取href属性并拼接成完整URL(页面内链接多为相对路径,需补全域名)。
  • 数据清洗:用.strip()去除姓名、职位文本中的多余空格和换行符,保证数据整洁。
  • 异常处理:添加response.raise_for_status(),在请求页面失败时直接抛出异常,方便排查网络或页面访问问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:20:57