|
动态网页的样寻页下页链下一页链接,往往不在HTML源码里。找动你按F12看到的态网那些标签,多数是接源JavaScript渲染后生成的假象。真正的样寻页下页链分页逻辑,藏在XHR请求或JSON数据流中。找动这是态网很多爬虫新手栽跟头的地方——他们死盯着静态源码找“下一页”三个字,结果一无所获。接源 我举个例子。样寻页下页链某电商网站的找动商品列表,页面底部明明有“下一页”按钮,态网但查看源码,接源只有一串 。样寻页下页链所有商品和分页链接都是找动Vue或React动态挂载的。这时候你要做的态网,不是翻源码,而是打开开发者工具的Network面板,清空日志,然后手动点击一次“下一页”。观察网络请求列表,会冒出一个类似 list.php?page=2&type=shoes 的接口。它的响应格式可能是JSON,里面有个字段叫 next_page_url 或者干脆是 page=3 的参数拼接规则。找到这个,你就拿到了真正的钥匙。 但有些网站更狡猾,分页URL不是简单的page参数递增。比如某论坛的帖子列表,下一页链接是 thread.php?fid=23&offset=40&order=lastpost。这里的offset是偏移量,每页20条,第二页就是40,第三页60。这种规律需要你对比两次请求的URL差异才能发现。别怕麻烦,把第一次和第二次点击的请求参数并排放在文本编辑器里,差异点就是分页的核心变量。 还有种情况,页面用POST请求加载更多内容,点“加载更多”按钮而不是“下一页”。这时候请求体里往往带着 page=1 或 cursor=xxx。cursor这种游标式分页最讨厌,它是一串加密字符串,比如 cursor=eyJpZCI6MjM0fQ==,你没法直接改数字跳过。但别慌,响应JSON里通常会附带下一个cursor值,你只需要不断提取并回传即可。这种设计常见于微博、Twitter的时间线——它们故意不让你猜页码,就是为了防爬。 如果你连Network面板都懒得开,还有个笨办法:直接禁用JavaScript刷新页面。用Chrome的NoScript插件或者Puppeteer的 page.setJavaScriptEnabled(false),再加载目标URL。很多动态网站会退化成纯静态版本,分页链接乖乖躺在源码里。比如某新闻网站,禁用JS后,底部会显示 下一页,这种是服务端渲染的降级方案,虽然丑,但能抓。 最后提醒一句:找到链接源码只是第一步。有些网站的反爬虫会检测你的访问频率,就算你拿到了正确的URL,请求太快照样封IP。我见过最狠的,分页接口返回200,但内容是“请滑动验证”。这时候你得模拟真人操作间隔,随机等3到7秒。技术问题往往最后变成耐心问题。 |