0

0

如何用Python脚本比较两个sitemap.xml的差异

煙雲

煙雲

发布时间:2025-12-22 08:23:02

|

178人浏览过

|

来源于php中文网

原创

用Python比较两个sitemap.xml差异需解析XML提取URL、标准化(小写/去尾斜杠/统协议)、递归处理嵌套sitemapindex,再集合比对新增/缺失URL并格式化输出。

如何用python脚本比较两个sitemap.xml的差异

用Python比较两个sitemap.xml的差异,核心是解析XML、提取URL列表,再做集合或有序比对。关键在于处理sitemap可能存在的嵌套(如sitemapindex)、重复URL、规范格式(如末尾斜杠、协议统一),以及输出可读性强的结果。

解析并标准化URL列表

sitemap.xml本质是XML,推荐用xml.etree.ElementTree标准库,无需安装)解析。注意:
• 多数sitemap用 标签包裹URL;
• 若是sitemapindex(含多个子sitemap),需递归抓取所有并过滤出以.xml结尾的子链接;
• URL标准化建议:转小写、移除末尾/、统一用https://(若业务要求)。

示例代码片段:

import xml.etree.ElementTree as ET
from urllib.parse import urlparse, urlunparse

def normalize_url(url): parsed = urlparse(url)

转小写,去掉末尾/,保留path/query/fragment

path = parsed.path.rstrip('/')
return urlunparse((parsed.scheme, parsed.netloc.lower(), path,
                   parsed.params, parsed.query, parsed.fragment))

def extract_urls_from_sitemap(file_path): urls = set() try: tree = ET.parse(file_path) root = tree.getroot() namespaces = {'ns': 'https://www.php.cn/link/654f3a10edb3bb1755a43cc4f9be9dc6'}

先尝试找普通url条目

    for loc in root.findall('.//ns:loc', namespaces):
        if loc.text:
            urls.add(normalize_url(loc.text.strip()))
    # 若是sitemapindex,递归处理子sitemap(这里简化为只读本地文件,实际需HTTP请求)
except Exception as e:
    print(f"解析失败 {file_path}: {e}")
return urls

执行三类基础比对

拿到两个标准化URL集合后,常用比对方式有:

立即学习Python免费学习笔记(深入)”;

  • 仅在A中存在(新增):用 urls_a - urls_b
  • 仅在B中存在(删除或失效):用 urls_b - urls_a
  • 双方共有但内容不同(如参数变化):需逐条对比原始字符串或哈希值(如hashlib.md5(url.encode()).hexdigest()),但通常标准化后集合差已足够

支持远程sitemap和层级解析

真实场景中,sitemap常托管在https://example.com/sitemap.xml,且可能包含嵌套引用。此时需:

EasySite
EasySite

零代码AI网站开发工具

下载
  • requests下载XML(加timeoutheaders防被拒)
  • 识别结构,对每个子递归下载并解析(注意相对路径需拼接base URL)
  • lxml(可选)替代ElementTree,支持XPath更灵活,但需额外安装

输出差异结果到文件或控制台

建议按类别分块输出,带行号和简单统计:

# 示例输出结构
=== 新增URL(sitemap_A 比 sitemap_B 多出) ===
1. https://example.com/blog/new-post
2. https://example.com/products/item-77

=== 缺失URL(sitemap_A 中已无,但 sitemap_B 仍有) ===

  1. https://www.php.cn/link/65951d951d3b5df75fc887290a473774
  2. https://www.php.cn/link/df0d020fc9a3e0bafef47e229b498ba5

总计:新增 2 条,缺失 2 条,共同 142 条

也可导出为CSV或JSON,方便后续导入Excel或CI流程校验。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

639

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1325

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12.6万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号