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

循环混入其他元素时出现Href键错误问题排查

我太懂这种挫败感了——单独跑代码一切正常,一整合到复杂循环里就突然抛出KeyError: 'href'。咱们来一步步拆解问题,搞定它:

为什么会出现这个问题?

单独测试时,你抓取的页面里所有匹配class的<a>标签都恰好带有href属性,但放到循环里后,可能遇到了这些情况:

解决方案

1. 先检查href属性是否存在再访问

最直接的办法是在循环里增加判断,确保标签确实有href属性再取值:

for a in soup.find_all('a', {"class": "nova-e-badge nova-e-badge--color-green nova-e-badge--display-block nova-e-badge--luminosity-high nova-e-badge--size-l nova-e-badge--theme-solid nova-e-badge--radius-m nova-v-publication-item__type"}):
    # 先判断href是否在标签的属性列表里
    if 'href' in a.attrs:
        print(a['href'])
    else:
        # 可选:打印异常标签,方便排查问题页面
        print(f"Warning: Found a matching tag without href: {a}")

2. 用CSS选择器直接过滤带href的标签

更高效的方式是从根源上只获取带有href属性的目标标签,使用CSS选择器的[href]规则:

# 把class选择器和[href]结合,只返回有链接的标签
target_selector = 'a.nova-e-badge.nova-e-badge--color-green.nova-e-badge--display-block.nova-e-badge--luminosity-high.nova-e-badge--size-l.nova-e-badge--theme-solid.nova-e-badge--radius-m.nova-v-publication-item__type[href]'
for a in soup.select(target_selector):
    print(a['href'])

这样select()方法只会返回同时满足class匹配且带有href属性的<a>标签,彻底避免KeyError。

3. 给循环加上异常处理(避免整体崩溃)

如果你的循环是遍历多个URL,建议加上异常捕获,防止单个页面的问题导致整个循环终止:

import time
import requests
from bs4 import BeautifulSoup as bsoup

url_list = ["https://www.researchgate.net/profile/David_Severson", ...]  # 你的URL列表

for url in url_list:
    try:
        # 加延迟避免反爬,也提升请求稳定性
        time.sleep(2)
        r = requests.get(url)
        r.raise_for_status()  # 捕获HTTP请求错误(比如403、500)
        soup = bsoup(r.text, "lxml")
        
        target_selector = 'a.nova-e-badge.nova-e-badge--color-green.nova-e-badge--display-block.nova-e-badge--luminosity-high.nova-e-badge--size-l.nova-e-badge--theme-solid.nova-e-badge--radius-m.nova-v-publication-item__type[href]'
        for a in soup.select(target_selector):
            print(a['href'])
    except Exception as e:
        print(f"Failed to process {url}: {str(e)}")
        continue

额外提一句:ResearchGate有反爬机制,循环请求时一定要加合理的延迟,不然很容易被封禁IP,也可能导致页面返回异常内容,间接引发这类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:56