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

求助:使用BeautifulSoup爬取指定页面并提取数据为CSV格式

搞定EVS认证组织数据爬取与CSV导出(新手友好版)

Hey there! 作为编程新手刚接触爬虫+不熟悉面向对象确实会有点手足无措,别慌,咱们一步步来把这个任务拆解清楚,用你已经上手的BeautifulSoup完成数据提取,最后导出成CSV文件~

第一步:准备依赖库

首先确保你已经安装了必要的工具包,打开终端运行:

pip install requests beautifulsoup4
  • requests:用来发送请求获取网页内容
  • beautifulsoup4:用来解析HTML结构,提取需要的数据

第二步:获取并解析网页内容

先写基础代码把页面抓下来,解析成BeautifulSoup能处理的对象:

import requests
from bs4 import BeautifulSoup

# 目标网页URL
url = "http://europa.eu/youth/volunteering/evs-organisation_en"

try:
    # 发送GET请求获取页面
    response = requests.get(url)
    response.raise_for_status()  # 如果请求失败(比如404/500),抛出异常提示
    # 解析HTML
    soup = BeautifulSoup(response.text, "html.parser")
except requests.exceptions.RequestException as e:
    print(f"请求网页出错啦:{e}")
    exit()

第三步:提取EVS组织数据

接下来要定位到组织信息的位置。我帮你假设页面里每个认证组织的条目都在一个带有特定class的容器里(你可以根据实际页面源码调整这个选择器)。咱们把每个组织的关键信息(名称、国家、联系方式、认证编号之类的)提取出来:

# 存储所有组织数据的列表
organisations = []

# 找到所有组织条目(这里的选择器请根据你看到的页面源码调整!)
organisation_items = soup.find_all("div", class_="evs-organisation-item")

for item in organisation_items:
    # 提取组织名称(示例选择器,实际要对应页面里的标签)
    name = item.find("h3").get_text(strip=True) if item.find("h3") else "无名称"
    # 提取国家
    country = item.find("span", class_="country").get_text(strip=True) if item.find("span", class_="country") else "无国家"
    # 提取联系方式(比如邮箱或电话)
    contact = item.find("a", href=True).get_text(strip=True) if item.find("a", href=True) else "无联系方式"
    # 提取认证编号(如果有的话)
    cert_number = item.find("div", class_="cert-id").get_text(strip=True) if item.find("div", class_="cert-id") else "无编号"
    
    # 把当前组织的信息存成字典,方便后续处理
    org_data = {
        "组织名称": name,
        "国家": country,
        "联系方式": contact,
        "认证编号": cert_number
    }
    organisations.append(org_data)

划重点:页面结构可能会有变化,你要打开浏览器的开发者工具(F12),对着目标数据右键「检查」,找到对应的HTML标签和class/id,替换上面的选择器哦!

第四步:导出成CSV文件

现在咱们把提取到的列表数据写入CSV,用Python自带的csv模块,简单又靠谱:

import csv

# 定义CSV的表头(要和上面字典的键对应)
headers = ["组织名称", "国家", "联系方式", "认证编号"]

try:
    # 打开文件准备写入(encoding="utf-8-sig"是为了让Excel能正确显示中文)
    with open("evs_organisations.csv", "w", newline="", encoding="utf-8-sig") as csvfile:
        # 创建CSV写入对象
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        # 写入表头
        writer.writeheader()
        # 写入所有组织数据
        writer.writerows(organisations)
    print(f"成功导出{len(organisations)}条数据到evs_organisations.csv!")
except IOError as e:
    print(f"写入CSV文件出错啦:{e}")

给新手的小提示

  1. 如果页面是动态加载的(比如滚动才加载更多数据),上面的代码可能只能抓第一页,这时候可能需要用selenium模拟浏览器,但先从静态页面入手就好~
  2. 不要频繁请求网页,避免给服务器造成压力,必要时可以加个time.sleep(1)在请求之间
  3. 如果你之后想尝试面向对象写法,可以把爬虫逻辑封装成一个类,比如EVSOrganisationSpider,把请求、提取、导出写成类的方法,这样代码更规整,但新手先把基础逻辑跑通最重要!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:53:20