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

使用BeautifulSoup从维基百科HTML中完整提取铁路事故相关链接

问题解决方案

现有代码问题

  • find('a') 仅返回匹配到的第一个<a>标签,这是你只能拿到第一条链接的核心原因
  • 标签筛选参数语法错误:attrs={'class':'href'=="accident"} 是无效写法,实际运行时不会按照你预期筛选链接
  • 没有异常处理逻辑,遇到无href属性的标签会直接抛出错误终止运行
  • 缺少可扩展的关键词过滤逻辑,无法覆盖disaster、tragedy等其他事故相关词条

优化后代码

# 可扩展的事故相关关键词列表,后续有新的相关词直接添加即可
RELATED_KEYWORDS = {'accident', 'disaster', 'tragedy', 'crash', 'collision'}
# 用set存储自动去重
list_of_urls = set()

for file in files:
    try:
        with open(f'files_overview/{file}', encoding="utf-8") as f:
            text = f.read()
        soup = BeautifulSoup(text, features="lxml")
        # 遍历所有内容容器
        for content_div in soup.find_all("div", attrs={'class':'mw-content-ltr'}):
            # 拿到容器下所有a标签,而不是只取第一个
            for a_tag in content_div.find_all('a', href=True):
                href = a_tag['href']
                # 只保留/wiki/开头的词条链接,排除帮助页、特殊页等无关内容
                if not href.startswith('/wiki/'):
                    continue
                # 检查链接文本或链接路径是否包含相关关键词
                link_text = a_tag.get_text(strip=True).lower()
                link_path = href.lower()
                if any(keyword in link_text or keyword in link_path for keyword in RELATED_KEYWORDS):
                    full_url = "https://en.wikipedia.org" + href
                    list_of_urls.add(full_url)
    except Exception as e:
        print(f"处理文件{file}时出错:{e}")

# 可选:如果需要转回list格式
list_of_urls = list(list_of_urls)

核心优化点

  • 改用find_all('a', href=True) 提取容器下所有带href属性的a标签,不会遗漏符合条件的链接
  • 新增关键词匹配逻辑,同时检查链接文本和链接路径,覆盖你提到的多关键词需求,关键词列表可随时扩展
  • 新增无关链接过滤逻辑,自动排除维基帮助页、特殊功能页等非词条内容
  • 用set存储链接自动去重,避免重复录入相同链接
  • 新增异常处理逻辑,单个文件解析错误不会中断整体运行
  • 改用with语句读取文件,避免文件句柄泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:09