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

使用BeautifulSoup提取网页社交媒体链接时报KeyError:'href'如何解决?

问题背景

目标提取页面 https://keithgalli.github.io/web-scraping/webpage.html 的所有社交媒体链接,初始编写代码如下:

import requests 
from bs4 import BeautifulSoup as bs

r = requests.get('https://keithgalli.github.io/web-scraping/webpage.html')
soup = bs(r.content)

links = soup.find_all('a', {'class':'socials'})

actual_links = [link['href'] for link in links]

运行抛出错误:

KeyError: 'href'

经排查,错误原因是该站点的socials类绑定在社交媒体链接的外层<ul>容器上,而非单个<a>标签上。原代码查询返回的列表元素为完整的<ul class="socials">节点,并非单个可直接提取href属性的<a>标签,迭代取值时触发报错。

修复方案

先定位到socials类的容器节点,再在容器内部查询所有<a>标签后提取href属性即可,修复后代码如下:

import requests 
from bs4 import BeautifulSoup as bs

r = requests.get('https://keithgalli.github.io/web-scraping/webpage.html')
soup = bs(r.content)

# 定位社交媒体链接外层容器
socials_ul = soup.find('ul', {'class': 'socials'})
# 容器内查找所有a标签
social_links = socials_ul.find_all('a')
# 批量提取href属性
actual_links = [link['href'] for link in social_links]

如果站点存在多个socials类容器,可使用以下兼容写法汇总所有链接:

import requests 
from bs4 import BeautifulSoup as bs

r = requests.get('https://keithgalli.github.io/web-scraping/webpage.html')
soup = bs(r.content)

actual_links = []
socials_containers = soup.find_all('ul', {'class': 'socials'})
for container in socials_containers:
    links = container.find_all('a')
    actual_links.extend([link['href'] for link in links])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:04