Skip to content
由魔法生成的目录

爬虫知识库

爬虫的常见方式

1. 解析 HTML 文档

最朴素和常用的方式,适用于以 HTML 直接输出的网页。使用这个方式前需要先确定网站的输出方式是否为内容型服务端渲染(对于这个概念,可参考附录)。

通常的爬取思路:

在页面上通过浏览器的开发者工具查看网页元素(Elements 面板),通过元素选择器定位到想要解析内容的元素。确定需要爬取的内容在哪个标签下,然后通过解析 HTML 文档,提取出需要的内容。

常见的解析方式:

  • 正则表达式匹配
  • XPath
  • DOM 解析器(解析后可获得文档树对象,通过命令式操作直接遍历 DOM 结构)

2. 请求 API

部分网站是由前端渲染的,即网站的内容是通过 JavaScript 代码动态生成的。通常称这类网站的输出方式为客户端渲染。即由前端代码向后端接口发起请求,然后动态渲染界面元素。

此类网页对爬虫相对友好,因为往往可以直接爬取结构化数据的 API(JSON 形式居多),不需要解析 HTML 文档,具备更好的稳定性,写起来也更简单。

通常的爬取思路:

首先查询目标网站的对外文档,如果其提供官方的 API,使用起来会更简单便捷。某些网站甚至会提供调用密钥(或 Token)让你直接以指定用户的身份调用接口获取私有数据,无需手动模拟登录。

如果官方未提供 API,则在页面关键数据呈现前打开浏览器开发者工具 - Network 面板,关注 XHR/Fetch 类型请求,通常可以找到对应页面结构的渲染数据来源,直接对这个 API 进行模拟请求即可。

伪装

部分网站开发者会拒绝常见的爬虫请求,只允许正常用户的流量。因此爬虫最好对请求做一些伪装,尤其是添加关键请求头,如 User-Agent 等,将自己的请求尽量伪装成正常浏览器的请求。可以降低请求被拒绝的概率。

登录态模拟

部分爬取内容需要登录才可访问。最常见的办法就是在页面上登录,然后将登录后的 Cookie 信息保存复制粘贴在爬虫请求头 的 Cookie 字段,来实现带登录态的爬虫请求。

当然,如果爬虫需要长期稳定运行,可以将这个获取 Cookie 的过程自动化,如加入判断,无缓存 Cookie 或登录态已失效时,重新用爬虫请求登录接口,模拟登录行为。

频率限制

部分网站会拒绝过高频率的请求,并有可能封掉 IP。因此爬虫最好视情况(如网站自身的说明等)对请求做一些限制,如最大并发数、请求间隔等。

内容协议

对于部分商业类敏感数据或网站声明不允许爬取的数据需谨慎,规避不必要的风险。

附录

服务端渲染与客户端渲染

通常传统模式都是服务端渲染,即访问某个页面 URL,响应结果是一串静态 HTML,通常你可以通过在页面上右键点击「查看页面源代码」来确定:如果显示的 HTML 源代码里包含当前页面呈现的内容数据,那么多半是服务端渲染;而如果 HTML 源代码中不包含当前页面已呈现的内容,仅仅是一些无关的骨架代码,那么多半是客户端渲染。

由三位创世大魔法使共同写成,作为世界树记忆被封存并藉由元素脉络传播至全宇宙。