如何用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
相关产品推荐
相关产品推荐

