动态渲染反爬虫

为了提高用户的体验,大部分网站都使用动态渲染,即使用JavaScript代码来实现。

  动态渲染,由JavaScript改变HTML DOM 导致页面内容发生变化的现象,不仅提高了网页的交互性,还提升网页的加载速度,为用户提供了更好的体验,网页中常见的表现形式有下拉,刷新,点击切换和悬停显示等,以下常见的几种案例。

  • 自动执行的异步请求


     网页资源由多个异步(AJAX)请求共同加载资源。


     当客户端请求时,为了提高效率,开发者将页面总资源分成多个资源,多个资源通过异步发送客户端。所以页面数据的响应值基本都是在多个AJAX请求响应中。
  • 点击事件


     在网页中通过点击按钮或标签发生请求,而点击事件一般与JavaScript的方法绑定,只要点击事件触发,就会执行事件的方法发送请求。
  • 下拉加载


     下拉加载实际上一种翻页操作,而翻页操作则为点击事件,只是鼠标操作不一样罢了,所以对于下拉加载,也是发送一个AJAX请求。

  动态渲染技术不止以上几种,但无论事件加载如何变化,动态渲染的基础不会变化,只要能够解决页面渲染问题,那么…

动态渲染爬虫解决方法:

  对于动态渲染,通过分析对应的JavaScript代码也能解决,但是时间成本太大,不推荐。如:网站有50个请求,那么需要就分析50对应的JavaScript代码。而且代码如果下次发生改变,那么又要重新分析。


以下是常用的对付动态渲染的工具:

  • Selenium


     不多介绍,做运维、爬虫的工程师都知道。
  • Puppeteer


     可以理解为异步的Selenium,Python 中使用 Pyppeteer 库
  • Splash


     Splash 是一个异步的 JavaScript 渲染服务,它带有HTTP API 的轻量级 Web 浏览器。它能够并行地处理多个页面请求。


     Splash 使用到分布式爬虫上,这是Selenium和Puppeteer无法做到的。做法:在云服务器上部署该服务,并配置负载均衡,然后多台爬虫服务器使用该服务。
题外话:

  在使用渲染工具做爬虫时,并不是最强大的渲染工具(如Splash)是最好的,而是争对网站而定。


  同时也要注意渲染工具加载的渲染时间,在这三个渲染工具中,都支持资源禁止加载,这个可以提高渲染时间。如:某网站需要的是文字资源,并不是图片资源,这里可以设置禁止加载图片或其它类型文件。


  通用不一定适用,对于页面的动态渲染,不要想到使用渲染工具是最好的,应当考虑爬取的资源,请求的资源,工具的所需的时间。如:网页中分析出JavaScript代码,AJAX请求也不是很多,这时可以结合 JavaScript + Python 代码的方式解决。

你可能感兴趣的:(爬虫逆向与反爬,python,javascript)