如何修改代码排除站点地图(sitemap)中的404错误URL?
排除站点地图中的404错误URL解决方案
要去掉站点地图里的404链接,核心是在生成条目之前先验证每个URL的访问状态,只保留能正常访问(返回200状态码)的地址。我们可以借助requests库来发送HTTP请求并检查响应状态,具体修改如下:
步骤1:添加必要依赖
先导入requests库,如果本地没安装,先执行pip install requests完成安装。
步骤2:修改循环逻辑,加入URL有效性检查
在遍历页面的循环里,先对每个URL发送请求,只有响应状态码为200时才生成站点地图条目;同时处理请求异常(比如连接超时、DNS失败等),这类异常链接直接排除。
修改后的完整代码
from usp.tree import sitemap_tree_for_homepage import xml.etree.cElementTree as ET import simplejson as json from datetime import date import requests from time import sleep tree = sitemap_tree_for_homepage('你的网站首页地址') # 替换为实际网站首页URL root = ET.Element("urlset", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9") for page in tree.all_pages(): url = page.url try: # 发送GET请求并设置超时,避免程序卡壳 response = requests.get(url, timeout=10) # 仅保留状态码为200的正常链接 if response.status_code != 200: continue # 可选:添加延时降低请求频率,避免触发网站反爬 sleep(0.5) except requests.exceptions.RequestException: # 捕获所有请求异常,直接跳过该URL continue prio = json.dumps(page.priority, use_decimal=True) lm = date.today().strftime("%Y-%m-%d") cf = page.change_frequency.value urlel = ET.SubElement(root, "url") ET.SubElement(urlel, "loc").text = url ET.SubElement(urlel, "lastmod").text = lm ET.SubElement(urlel, "changefreq").text = cf ET.SubElement(urlel, "priority").text = prio ET.indent(root, " ") xmltree = ET.ElementTree(root) xmltree.write("sitemap.xml", encoding="utf-8", xml_declaration=True )
关键说明
requests.get(url, timeout=10):发送请求并设置10秒超时,防止单个异常链接卡住整个程序- 状态码判断:仅保留返回200的链接,404、500等错误状态的URL直接跳过
- 异常捕获:用
try-except处理网络中断、DNS解析失败等所有请求异常,这类链接也不会被加入站点地图 - 可选延时:
sleep(0.5)可降低请求频率,避免触发网站反爬机制,可根据实际情况调整时长
内容的提问来源于stack exchange,提问作者May
相关产品推荐
相关产品推荐

