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

使用Beautiful Soup爬取静态网页韩语动词变位导出CSV问题求解

问题分析
  • 你遇到的AttributeError报错是因为此前调用find_all()得到的是元素集合(列表类型),直接在集合上调用仅支持单个节点的find()方法才触发的报错,你后续代码中改用results2.find_all("tr", class_="conjugation-row")遍历的写法已经解决了这个问题。
  • CSV出现大量空单元格是因为你每抓取一条变位数据就向DataFrame追加一行,相同变位名称没有做行合并,每个动词的变位都独立生成行,其余动词对应的列自然为空。
修正后代码
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 定义待抓取的URL列表
urls = [
    'https://koreanverb.app/?search=%ED%95%98%EB%8B%A4', 
    'https://koreanverb.app/?search=%EB%A8%B9%EB%8B%A4',
    'https://koreanverb.app/?search=%EB%A7%88%EC%8B%9C%EB%8B%A4'
]

# 先从第一个URL获取所有变位名称作为统一行索引
first_resp = requests.get(urls[0])
first_soup = BeautifulSoup(first_resp.content, 'html.parser')
all_rows = first_soup.find_all("tr", class_="conjugation-row")
conj_names = [row.find("td", class_="conjugation-name").text.strip() for row in all_rows]

# 存储所有动词的变位数据
verb_data = {}

for url in urls:
    resp = requests.get(url)
    soup = BeautifulSoup(resp.content, 'html.parser')
    # 获取动词原形
    verb_name = soup.find('dl', class_='dl-horizontal').find('dd').text.strip()
    # 生成当前动词的变位映射字典
    conj_map = {}
    rows = soup.find_all("tr", class_="conjugation-row")
    for row in rows:
        name = row.find("td", class_="conjugation-name").text.strip()
        korean_val = row.find("td", class_="conjugation-name").find_next_sibling("td").text.strip()
        conj_map[name] = korean_val
    # 按统一的变位名称顺序存储结果
    verb_data[verb_name] = [conj_map[name] for name in conj_names]

# 转换为DataFrame
df = pd.DataFrame(verb_data, index=conj_names)
df.reset_index(inplace=True)
df.rename(columns={'index': 'conjugation name'}, inplace=True)

# 导出为CSV,使用utf-8-sig编码避免Excel打开韩语乱码
df.to_csv('scrape.csv', index=False, encoding='utf-8-sig')
print('Verb Conjugations Collected and Appended to CSV, one per column')
代码说明
  • 先抓取第一个URL的所有变位名称作为统一行索引,保证后续所有动词的变位都按相同顺序排列
  • 每个动词的变位数据先存入字典,全部抓取完成后统一转换为DataFrame,同一变位名称的所有动词结果都会放在同一行,无空值
  • 去掉冗余的文件提前创建逻辑,直接用pandas的to_csv方法输出,指定编码避免韩语乱码
  • 所有conjugation-row类的行都会被完整抓取,不存在仅抓取首行的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:18:03