引入
根据笔者以往的爬虫经验,大部分的爬虫是在静态网页上完成的,爬虫所要做的只不过是提交请求,然后分析返回的页面即可。当然,api 本质上也可以作为静态页面来处理。这意味着只要掌握 requests 就可以完成 60%-80%的爬虫任务。
这是一个很惊人的占比,这里解释一下,静态页面可能听起来很 low,但是有着以加载速度更快、易于维护为核心的一系列优势,尤其是引入了 ajax 之后,实现了动态加载,通过更加频繁的前后端交互,使得用户的使用更加丝滑流畅。
但是总有一些网站是静态爬虫无法应付的。它们就是与 js 耦合度较高的,需要 js 进行渲染的页面,与上文所述的情况(前端只接收数据,而不用对数据进行计算层面的处理)不同,这类网站将部分的计算工作交托给前端,牺牲部分的用户体验来实现缓解服务器压力等一系列目的。
这就是剩下的 20%了。如何处理这些刺头呢?这就引出了本文的主角–splash。
提高爬虫效率主要从三个方面开始复习。
- 并发
- ip
- cookies
并发必然引发的一个结果就是反爬虫机制,这种时候爬虫的效率不会因为并发而提高,反而会因为网站的防御机制拖累爬虫的速度。
自然而然地就引出了 2,代理爬虫。代理爬虫能够从多个 ip 发送请求,减小了单个 ip 的请求频率,自然触发反爬虫机制的概率也就小了很多。
但是新的问题又出现了,对于需要 登录 的网站,需要提交 cookies 来模拟登录情况,模拟登录不难,但是同一个 cookies 从不同的 ip 同时发送请求很明显不合常理,依然会触发反爬虫机制。
这是到目前为止我所遇到的影响爬虫效率的问题,就在这里做一个总结吧,如果后续遇到新的效率相关的问题,再做补充。
这是 Linux 课程的大作业…
