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

如何用BeautifulSoup结合正则提取非标准data-link属性的RPM包链接

解决方法

你的代码存在几个问题:

  1. 缺少requests模块的导入,调用requests.get()会直接报错。
  2. 正则表达式转义错误,且没必要用正向预查,直接匹配属性值即可。
  3. 虽然BeautifulSoup支持用正则匹配属性值,但你的正则写法有误。

修正后的代码方案一(正则匹配属性值)

#!/usr/bin/env python3
import re
import requests  # 补上缺失的导入
from bs4 import BeautifulSoup

url = "https://www.splunk.com/en_us/download/splunk-enterprise.html"

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

# 修正正则:直接匹配以.rpm结尾的链接值
pattern = re.compile(r".*\.rpm$")
# 筛选带data-link属性且值匹配正则的a标签
packages = soup.find_all("a", attrs={"data-link": pattern})

# 提取并打印所有RPM包链接
for pkg in packages:
    print(pkg["data-link"])

方案二(lambda表达式筛选)

如果觉得正则写起来麻烦,用lambda表达式直接判断属性值结尾更直观:

#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup

url = "https://www.splunk.com/en_us/download/splunk-enterprise.html"

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

# 筛选存在data-link属性且值以.rpm结尾的a标签
packages = soup.find_all("a", attrs={"data-link": lambda x: x and x.endswith(".rpm")})

for pkg in packages:
    print(pkg["data-link"])

关键说明

  • 必须导入requests模块才能发起HTTP请求获取页面内容。
  • BeautifulSoup的find_all()支持通过正则或可调用对象(如lambda)匹配属性值,逻辑正确即可筛选到目标元素。
  • 直接提取标签的data-link属性值就能得到RPM包链接,无需额外从HTML文本中匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:54:14