Python如何从XML中提取所有URL链接_技术教程_七洗推广网

Python如何从XML中提取所有URL链接

#技术教程 发布时间: 2025-12-25
Python提取XML中URL的核心是用xml.etree.ElementTree或lxml解析并定位文本内容或href/src/url等属性中的HTTP/HTTPS链接,需去重、清洗、校验合法性并支持相对路径补全。

Python提取XML中的所有URL链接,核心是解析XML结构并定位包含URL的元素或属性。常用方法是用xml.etree.ElementTree(内置、轻量)或lxml(功能强、支持XPath和HTML容错)。URL通常出现在元素文本内容中(如https://example.com),或作为属性值(如),需根据实际XML格式灵活处理。

使用ElementTree提取文本中的URL

适用于URL直接写在标签内的场景(如等)。ElementTree可递归遍历所有元素,检查其文本内容是否符合URL格式。

  • ET.iterparse()ET.fromstring()加载XML
  • 遍历所有元素,检查elem.text是否非空且以http://https://开头
  • 可配合re.match(r'^https?://', text.strip())做简单校验

使用XPath从属性中提取URL(推荐lxml)

当URL藏在属性里(如hrefsrcurl),XPath表达式更精准高效。lxml支持完整XPath语法,比ElementTree更灵活。

  • 安装:pip install lxml
  • 常用XPath://*[@href] | //*[@src] | //*[@url] 匹配含这些属性的任意元素
  • 再用elem.get('href')等获取属性值,并过滤掉空值或非URL字符串

兼顾文本+属性,避免重复和无效链接

真实XML可能混合多种URL位置,还可能存在注释、CDATA、相对路径或空值。提取时建议统一去重、清洗和验证。

  • set()自动去重
  • 对每个候选字符串调用str.strip(),跳过空值和纯空白
  • urllib.parse.urlparse()判断是否为合法URL(scheme存在且为http/https)
  • 若需处理相对URL,可用urllib.parse.urljoin(base_url, rel_url)补全

一个简洁可用的示例代码

以下用lxml实现“文本+常见属性”双路提取,带基础校验:

from lxml import etree
from urllib.parse import urlparse

def extract_urls_from_xml(xml_source): tree = etree.parse(xml_source) if hasattr(xml_source, 'read') else etree.fromstring(xml_source) urls = set()

# 提取属性中的URL
for attr in ['href', 'src', 'url', 'xlink:href']:
    for elem in tree.xpath(f'//*[@{attr}]'):
        val = elem.get(attr, '').strip()
        if val and urlparse(val).scheme in ('http', 'https'):
            urls.add(val)

# 提取文本中的URL(仅检查直系文本,避免混入子元素内容)
for elem in tree.iter():
    if elem.text and elem.text.strip():
        text = elem.text.strip()
        if text.startswith(('http://', 'https://')):
            if urlparse(text).scheme in ('http', 'https'):
                urls.add(text)

return list(urls)

使用示例

xml_data = '''https://www./link/99efe6e00320edb6fac7ab90e845bb3e; ''' print(extract_urls_from_xml(xml_data))

技术教程SEO

上一篇 : 双主角!《如龙极3》官宣预购特典:带春日一番打群架

下一篇 : 怎么用AI创作音乐?零基础也能在5分钟内写出一首歌
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案