TL;DR
- 分页可以是下一页链接、编号 URL、游标 API、加载更多控件或滚动触发请求;在编写循环之前检查实际数据源。
- 在稳定的终端信号时停止:没有下一链接或游标、未更改的项目集、页面限制或明确的源结束。不要使用
while True进行无限循环。 - 通过稳定的项目 ID 或规范 URL 去重;在不断变化的目录中,重复页面和重新排序的结果是正常的。
- Playwright 可以滚动或点击,当允许的网站确实需要浏览器交互时。文档化的源 API 通常更容易进行检查点。
- Nstdata Crawl 发现链接页面在
maxDepth、maxPages、包含和排除规则内,但网站爬取并不能保证每个仅限滚动的项目。
为什么分页会破坏其他正常工作的抓取器?
当脚本将第一次响应视为整个集合或猜测更多结果是如何加载时,分页会破坏抓取器。网站可能在 HTML 中放置 <a rel="next">,构造编号 URL,从 JSON 端点返回游标,或在滚动后附加卡片。这些是不同的约定。检查浏览器的网络面板,并在实施之前记录源的允许访问方法。
对于多页集合,Nstdata Crawl 可以发现并递归获取允许的 URL,而特定源的延续规则仍需验证。
当爬取进行时,结果顺序可能会改变。新项目可能会将旧项目移至下一页,从而导致重复或遗漏。使用稳定的项目键和爬取窗口或源快照,当 API 支持一个时。页面编号是导航指令,而不是其包含项目的身份标识。
开始之前你需要什么?
准备一个经过批准的源、已知的第一页、项目容器和稳定的项目 ID、观察到的下一页机制,以及明确的最大页面或项目预算。对于基于链接的 Python 示例,安装 requests 和 Beautiful Soup。对于仅浏览器的工作流程,安装 Playwright 及其浏览器二进制文件。将凭据保留在源代码之外,并遵守网站的文档条款和速率限制。
记录 page_url、fetched_at、next_url 或 cursor、项目 ID 以及每一步的项目集指纹。这个账本使得停滞或重复的页面变得显而易见,并支持在崩溃后恢复。源提供的游标应该按原样保存;不要通过递增页面编号来创造新的游标。
如何跟随下一页链接?
当返回的 HTML 包含下一链接时使用此方法。该代码是经过批准的源的模板;选择器必须在实时页面上确认。
方法 1:跟随 HTML 分页
步骤 1. 确定指向下一页的链接和稳定的项目选择器。当网站提供时优先使用 rel="next",但验证其指向的确实是预期的列表。
步骤 2. 一次获取一页,解析相对 URL,并在缺少或重复的下一 URL 上停止:





