Nstproxy 现已升级为 Nstdata。了解此次变化。
周一至周五 09:00 - 18:00(UTC+08:00) 公司地址
19H MAXGRAND PLAZA NO.3 TAI YAU STREET SAN PO KONG, KOWLOON HONG KONG ©2026 NST LABS TECH LTD. 保留所有权利。
站点地图解析以进行完整站点爬取:2026 实用指南
Kai Watanabe Scraping Infrastructure Evangelist
如何抓取和解析网站地图以进行全面爬取 TL;DR
网站地图是一个发现输入,而不是每个列出页面都可访问或值得爬取的证明。
网站地图索引指向其他网站地图;一个 URL 集合列出候选页面。
网站地图的包含并不建立访问权限、更新情况或完整的网站覆盖。
将过滤后的网站地图清单与有限递归的爬取结果进行比较,以查找差距。
Nstdata 爬取处理 JavaScript 渲染和代理路由,具备管理请求;其文档列出了六种输出类别:Markdown、HTML、原始数据、PDF、截图和链接。
什么是网站地图,为什么要解析它?
网站地图是一个列出页面 URL 的 XML 文档,或是列出其他网站地图文档的索引。解析它可以为爬取计划提供候选项。它并不能证明每个 URL 是最新的、规范的、内部链接的,或适合您的使用。完整的网站覆盖也可能需要链接发现,因为某些页面可能不在网站地图中。根据主机、路径、深度和页面限制将两者的输入结合起来。
Nstdata Crawl 可以将一个 URL 或一个有限的链接页面集合转化为 AI 代理、RAG 索引或数据管道的材料。使用您自己的字段规则和接受检查以实现特定结果:从网站地图中发现授权的 URL,并将经过审查的子集转变为有限的网站爬取。 Nstdata 全站爬取指南 解释了站点级选项。
免费试用 Nstdata →
对于这里涉及的更狭义的任务,Nstdata 网站页面发现指南 提供了选择第一个代表页面的有用背景。
在开始之前您需要什么?
从您拥有或可能进行爬取的网站开始。检查 /robots.txt 以获取网站地图声明和访问规则,然后检查网站地图索引或 URL 集合。记录允许的主机、路径前缀、文件类型、语言和最大页面数量。排除帐户、购物车、搜索、日历和重复查询路线,除非需要。保留候选、接受、拒绝和实际爬取 URL 的清单。
Crawl API 文档 使用 https://api.nstdata.io、x-api-key 头和 Content-Type: application/json。在运行方法之前准备这些字段:
字段 需要提供的内容 url一个允许的 HTTPS 页面或站点入口 URL formats
请求的输出,例如 ["markdown"] 或 ["html","screenshot"]
onlyMainContent仅在主要内容选择适合任务时为 true
maxDepth、maxPages针对站点范围作出的明确限制
includeUrls、excludeUrlsURL 模式,保持发现范围内
timeout当默认设置不合适时,任务的超时时间(毫秒)
标准的管理请求没有单独的代理主机、端口、用户名、密码或协议字段。在运行大型任务之前,请检查 当前爬取定价页面 以了解帐户限制和费用。
审查目标的访问政策和范围。 机器人排除协议 定义了爬虫如何读取机器人规则;它并不授予内容使用权限。请将凭据和私密数据排除在示例和诊断日志之外。
网站地图索引和 URL 集合是如何工作的? 一个 urlset 包含页面 <loc> 条目。一个 sitemapindex 包含可能是 XML 或压缩文件的子网站地图 <loc> 条目。Nstdata Crawl 可以从站点结构发现 URL,并在配置的 maxDepth、maxPages、包含和排除规则内递归跟踪内部链接。JavaScript 渲染在动态页面上提供帮助,代理路由集成于管理服务中。API 不免除审查候选 URL 和爬取权限的必要。
对于已知 URL,单页面爬取检索一个结果。对于网站部分,POST /api/v1/crawl 在所提供的深度、页面计数和 URL 规则内递归发现链接页面。 文档 列出了 Markdown、HTML、原始数据、PDF、截图和链接作为六种输出类别;产品页面还宣传 JSON,但特定领域的 JSON 模式仍需要明确的字段映射。保持每个接受的记录与其源 URL 和返回的元数据相绑定。
测试一个具有代表性的JavaScript页面在扩展之前。渲染状态可能依赖于时间、地区、同意或已登录的会话。将返回的HTML或截图与预期页面状态进行比较;如果它们不同,则仅调整记录的渲染和等待控制。
如何解析网站地图并爬取网站? 首先解析和过滤网站地图候选项,使用有界的爬虫发现来查找链接页面,并维护一个清单以便进行可重复的覆盖检查。网站地图和递归爬取回答相关但不同的发现问题。
方法 1:在爬取之前检查网站地图
步骤 1:查找网站地图声明 打开网站的 /robots.txt 并查找 Sitemap: 行。如果没有任何声明,仅测试网站文档中记录的网站地图位置;不要假设每个网站都使用 /sitemap.xml。
步骤 2:分类 XML 确定根是否为 sitemapindex 或 urlset。仅在已批准的主机内跟随子网站地图URL,并避免无界递归获取。[截图:XML根和 <loc> 条目。]
请使用有界解析器,而不是手动复制 <loc> 值。这个标准库示例接受一个网站地图URL,最多跟随三个网站地图索引级别,保持在原始主机上,并打印页面URLs:
from urllib . request import urlopen
from urllib . parse import urlparse
from xml . etree import ElementTree as ET
import gzip , sys
start = sys . argv [ 1 ]
host = urlparse ( start ) . hostname
seen = set ( )
def visit ( url , depth = 0 ) :
if depth > 3 or url in seen or urlparse ( url ) . hostname != host :
return
seen . add ( url )
with urlopen ( url , timeout = 20 ) as response :
raw = response . read ( 10_000_001 )
if len ( raw ) > 10_000_000 :
raise ValueError ( "Sitemap exceeds the review size cap" )
if url . endswith ( ".gz" ) :
raw = gzip . decompress ( raw )
root = ET . fromstring ( raw )
ns = { "s" : "http://www.sitemaps.org/schemas/sitemap/0.9" }
if root . tag . endswith ( "sitemapindex" ) :
for loc in root . findall ( "s:sitemap/s:loc" , ns ) :
visit ( loc . text . strip ( ) , depth + 1 )
elif root . tag . endswith ( "urlset" ) :
for loc in root . findall ( "s:url/s:loc" , ns ) :
if urlparse ( loc . text . strip ( ) ) . hostname == host :
print ( loc . text . strip ( ) )
else :
raise ValueError ( "Unexpected sitemap root" )
visit ( start )
将其保存为 parse_sitemap.py 并运行 python3 parse_sitemap.py https://example.com/sitemap.xml > urls.txt。在爬取之前审查并去重 urls.txt;该脚本不授予收集列出页面的权限。
步骤 3:审查候选项 标准化和去重URLs,然后按批准的主机、路径、语言和内容类型进行过滤。列出的网址是候选项,而不是接受的页面。
方法 2:使用 Nstdata 爬虫进行有界发现
步骤 1:存储 API 密钥 将 NSTDATA_API_TOKEN 保存在服务器端,并将其作为 x-api-key 发送。
步骤 2:提交一个范围作业 使用 POST /api/v1/crawl 和一个起始URL、maxDepth、maxPages、包括/排除URL规则和所需格式。以下示例遵循官方网站爬取请求形状。
在你的终端中将 NSTDATA_API_TOKEN 设置为你的Nstdata账号,然后运行文档中快速启动请求。公共文档对一些其他同步和异步路由标注不一致;在生产使用前,请比较你账号的Playground生成的请求。
curl --output crawl-response.json --request POST "https://api.nstdata.io/api/v1/crawl" \
--header "x-api-key: ${NSTDATA_API_TOKEN} " \
--header "Content-Type: application/json" \
--data '{"url":"https://example.com/docs/","formats":["markdown"],"maxDepth":2,"maxPages":10,"includeUrls":["*example.com/docs/*"],"excludeUrls":["*example.com/admin/*"],"ignoreQuery":true}'
响应保存为 crawl-response.json。在使用任何返回内容之前,检查嵌套的 data.success、data.status 和 data.data.metadata.statusCode 字段。
步骤 3:比较覆盖率 轮询爬取ID,检索页面,并将返回的URLs与您的网站地图清单进行比较。调查缺失的高价值页面和意外路径,而不是假设发现已完成。
方法 3:维护可重复的URL清单
步骤 1:快照候选项 保存归一化的URL、源网站地图和每个批准候选项的发现时间。
步骤 2:跟踪爬取结果 记录每个URL的获取状态、内容哈希和拒绝原因。保持网站地图更改与内容更改分开。
步骤 3:选择性刷新 在目标允许的节奏下重新访问更改或高价值页面。避免仅因为网站地图时间戳更改而重新爬取未更改的大部分。
如何验证输出? 记录源URL、提交时间、请求格式、非机密选项、任务ID(如存在)、返回的页面状态,以及每条记录通过或未通过审核的原因。检查内容以及API封套。如果响应包含markdownRef、htmlRef、rawDataRef、screenshotRef或pdfRef,请通过GET /api/v1/crawl/storage/read?st={ref}检索该令牌。
对于此工作流,请在实施下游解析器或特定格式的接受检查时参考站点地图协议 。
为什么站点地图发现可能会错过页面? 基于站点地图的抓取可能会失败,因为根文件是站点地图索引。使用症状表来识别失败的层级,然后再更改限制或重试。
症状 可能的原因 下一步行动 只解析第一个站点地图 根文件是站点地图索引。 按深度和主机限制跟踪子<loc>条目。 许多列出的URL失败 站点地图过时或访问受到限制。 检查最终状态和目标规则;拒绝无法访问的候选项。 抓取未能捕捉到预期页面 深度、限制、URL规则或缺失链接限制了发现。 将清单与返回的URL进行比较,并调整某个边界。
Nstdata的文档列出了任务级错误,例如access_denied、timeout、parse_error和internal_error。外部HTTP 200仍然可以伴随失败的任务。检查响应中的success、status、errorCode和errorMessage(如果存在)。仅在您可以访问的网站上重试暂时性失败。
哪种方法最合适? 解析站点地图以获取候选清单,使用Nstdata Crawl进行有限链接页面发现,并在必须刷新覆盖时维护清单。在每次运行后比较发现和接受的URL。Nstdata网站抓取概述 提供了有关网站路径的更多细节。
首次成功运行后您应该做什么? 保存批准的配置和一个源支持的输出记录,然后在一小组不同的页面模板上重复。仅在这些记录通过相同的接受检查后增加范围。
常见问题:您还需要知道什么? 不。网站可以省略页面、保留过时的URL,或者列出您需要的部分之外的URL。与内部链接发现进行比较。
问:Nstdata Crawl能否使用站点地图并跟踪链接?
其产品页面描述了站点地图和链接发现;限制作业深度、页面数和URL规则。
不。在收集内容之前,请检查目标的规则及您使用该内容的权限。
问:基于站点地图的抓取是否需要与Nstdata Crawl单独的代理配置?
标准的托管爬虫请求不需要单独的代理主机、端口、用户名、密码或协议字段。请确认您的帐户中任何可选的自定义代理选择及相关使用费用。
问:HTTP 200 是否证明基于网站地图的爬虫结果可用?
不。在将其用于 AI 或数据工作流程之前,请检查嵌套任务结果、页面状态、预期字段和正文的完整性。
支持 JavaScript 渲染,成功率达 99.8%
将任意网站转换为 Markdown、HTML、JSON、链接、PDF 等格式,无需管理爬取基础设施。 开始免费爬取 →