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

基于Beautiful Soup的德国学校网站爬虫代码修正求助

修正后的爬虫脚本:提取德国学校数据并保存为CSV/Pandas DataFrame

先确保安装必要依赖:

pip install requests beautifulsoup4 pandas

以下是可以正常提取目标字段并保存数据的完整代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 目标URL
url = "https://schulen.bildung-rp.de"

# 发送请求(模拟浏览器访问,避免被反爬拦截)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
response.raise_for_status()  # 检查请求是否成功

# 解析HTML
soup = BeautifulSoup(response.text, "html.parser")

# 定义要提取的字段
target_fields = [
    "Kurzbezeichnung",
    "Schulnummer",
    "Anschrift",
    "Telefon",
    "Telefax",
    "E-Mail",
    "Internet",
    "Träger"
]

# 存储所有学校数据的列表
school_data = []

# 定位每个学校的信息容器(根据页面实际结构调整,示例假设每个学校在class为"schul-item"的div中)
school_containers = soup.find_all("div", class_="schul-item")

for container in school_containers:
    school_info = {}
    # 遍历每个目标字段,提取对应内容
    for field in target_fields:
        # 查找字段对应的标签(匹配包含字段名的label)
        label_element = container.find("label", string=lambda text: text and field in text)
        if label_element:
            # 获取字段值,处理标签嵌套情况
            value_element = label_element.find_next_sibling()
            school_info[field] = value_element.get_text(strip=True) if value_element else ""
        else:
            # 字段不存在时留空
            school_info[field] = ""
    
    school_data.append(school_info)

# 转换为Pandas DataFrame
df = pd.DataFrame(school_data)

# 保存为CSV文件(用utf-8-sig编码避免德语特殊字符乱码)
df.to_csv("de_schools_data.csv", index=False, encoding="utf-8-sig")

print(f"成功提取{len(school_data)}条学校数据,已保存为de_schools_data.csv")
print("DataFrame预览:")
print(df.head())

关键修正点说明

  1. 反爬处理:添加User-Agent模拟浏览器请求,避免网站拦截非浏览器请求。
  2. 空值容错:每个字段都做了存在性判断,即使页面中缺少某个字段,也不会报错,只会留空。
  3. 数据结构对齐:先将所有学校数据收集为字典列表,再统一转换为DataFrame和CSV,确保字段与列名完全匹配。
  4. 编码适配:保存CSV时使用utf-8-sig编码,兼容德语特殊字符(如ä、ö、ü)。

注意事项

  • 如果页面中学校信息的容器不是div.schul-item,需要根据实际HTML结构调整school_containers的定位规则(比如改用table tr或其他标签/class)。
  • 若Internet字段是链接形式,可单独提取href属性:value_element.get("href", "")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:22:44