在完成前面章节后,的确可以去爬取很多数据了,但很多网站会对爬虫了流量进行限制,我们该如何去应对这些限制呢?
请求频率
对于某些API对请求频率有一定的限制,我们可以手动控制请求的时间间隔,比如使用setInterval
函数可以进行定时执行代码,示例代码:
1 | // ...require something |
setInterval
详细语法可以参考这里
如果你对Nodejs比较熟悉的话,也可以尝试去使用ES8里的新语法async/await
,下面代码是一个简单的demo
1 | const sleep = (ms) => new Promise((suc,fail) => setTimeout(suc, ms)); |
输出如下:
1 | $ node index |
其中async
关键字放在函数前面声明这时一个异步函数,await
关键字会对Promise
进行阻塞,从而达到定时执行的效果; sleep
是我们自行封装的休眠函数,用Promise
对setTimeout进行封装,方便调用。
UA验证
UA指的是HTTP请求头部的User-Agent
字段,是用来给服务器分辨请求来源浏览器型号用到的。很多服务器会对未知UA的请求进行限制,这个时候我们需要对UA进行伪装。
幸运的是,superagent
提供了很方便的API在请求中设置UA,如下所示:
1 | superagent |
为了使伪装的效果更好,我们通常会不停的变换UA,以下是一个可用的UA列表:
1 | const USER_AGENTS = [ |