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

如何在BeautifulSoup中获取bs4.elements.tag的所有链接属性(href/src/url等)

解决方案

核心思路是不指定固定属性名,遍历单个标签的所有属性,对属性值进行URL合法性校验,匹配成功就提取,完全不需要提前硬编码href/src/url这类属性名。

你可以参考下面的实现代码:

import bs4
from urllib.parse import urlparse

def is_valid_url(value):
    # 自定义URL校验规则,可根据自己的需求调整
    try:
        result = urlparse(value)
        # 示例规则:只要有协议和域名就算合法URL
        return all([result.scheme, result.netloc])
    except:
        # 非字符串类型的属性值直接判定为不合法
        return False

# 原有解析逻辑
soup = bs4.BeautifulSoup(some_response.text, "html.parser")
# find_all传True表示匹配所有标签,也可以指定标签列表缩小范围,比如['a','img','iframe']
all_tags = soup.find_all(True)

for tag in all_tags:
    # 遍历当前标签的所有属性
    for attr_name, attr_value in tag.attrs.items():
        # 处理多值属性(比如class属性会返回列表)
        if isinstance(attr_value, list):
            for val in attr_value:
                if is_valid_url(val):
                    print(f"标签名:{tag.name},属性名:{attr_name},链接:{val}")
        else:
            if is_valid_url(attr_value):
                print(f"标签名:{tag.name},属性名:{attr_name},链接:{attr_value}")

你可以根据自己的业务场景调整规则:

  • 如果只需要匹配http/https开头的链接,可以在校验逻辑中增加result.scheme in ('http', 'https')的判断,过滤掉ftp、mailto等其他协议的内容
  • 如果需要匹配相对路径链接,可以调整校验规则,比如判断字符串是否以/、./、../开头,不需要强制要求存在协议和域名
  • 如果遍历全页面标签效率太低,可以限定只遍历a、img、script、link、iframe这类常用带链接属性的标签,缩小搜索范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:00:00