当前位置: 附加器 >> 附加器资源 >> Pyppeteer比selenium更高
当今大数据的时代,网络爬虫已经成为了获取数据的一个重要手段。
随着互联网的发展,前端技术也在不断变化,数据的加载方式也不再是单纯的服务端渲染了。现在你可以看到很多网站的数据可能都是通过接口的形式传输的,或者即使不是接口那也是一些JSON的数据,然后经过JavaScript渲染得出来的。
这时,如果你还用requests来爬取内容,那就不管用了。因为requests爬取下来的只能是服务器端网页的源码,这和浏览器渲染以后的页面内容是不一样的。因为,真正的数据是经过JavaScript执行后,渲染出来的,数据来源可能是Ajax,也可能是页面里的某些Data,或者是一些ifame页面等。不过,大多数情况下极有可能是Ajax接口获取的。
所以,很多情况我们需要分析Ajax请求,分析这些接口的调用方式,通过抓包工具或者浏览器的“开发者工具”,找到数据的请求链接,然后再用程序来模拟。但是,抓包分析流的方式,也存在一定的缺点。
一是:因为有些接口带着加密参数,比如token、sign等等,模拟难度较大;
二是:抓包的方式只适合量小的情况。如果有一百、一千个,甚至五千、一万个网站要处理时,该如何处理?还一个一个分析数据流?一个一个去抓包吗?
基于以上的两个严重的缺点,那有没有一种简单粗暴的方法,既不需要分析数据流,不需要抓包,又适合大批量的网站采集呢?这时Puppeteer、Pyppeteer、Selenium、Splash等自动化框架出现了。使用这些框架获取HTML源码,这样我们爬取到的源代码就是JavaScript渲染以后的真正的网页代码,数据自然就好提取了。同时,也就绕过分析Ajax和一些JavaScript逻辑的过程。这种方式就做到了可见即可爬,难度也不大,同时适合大批量的采集。由于是模拟浏览器,一些法律方面的问题可以绕过。毕竟,爬虫有风险啊!哈哈....
Selenium,作为一款知名的Web自动化测试框架,支持大部分主流浏览器,提供了功能丰富的API接口,常常被我们用作爬虫工具来使用。然而selenium的缺点也很明显,比如速度太慢、对版本配置要求严苛,最麻烦是经常要更新对应的驱动。
由于Selenium流行已久,现在稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以判断出是真人访问还是webdriver。虽然也可以通过中间代理的方式进行js注入屏蔽webdriver检测,但是webdriver对浏览器的模拟操作(输入、点击等等)都会留下webdriver的标记,同样会被识别出来,要绕过这种检测,只有重新编译webdriver,麻烦自不必说,难度不是一般大。
由于Selenium具有这些严重的缺点。pyperteer成为了爬虫界的又一新星。相比于selenium具有异步加载、速度快、具备有界面/无界面模式、伪装性更强不易被识别为机器人,同时可以伪装手机平板等终端;虽然支持的浏览器比较单一,但在安装配置的便利性和运行效率方面都要远胜selenium。
pyppeteer无疑为防爬墙撕开了一道大口子,针对selenium的淘宝、美团、文书网等网站,目前可通过该库使用selenium的思路继续突破,毫不费劲。
01.Pyppeteer简介
Pyppeteer其实是Puppeteer的Python版本,下面简单介绍下Pyppeteer的两大特点,chromium浏览器和asyncio框架:
1).chromium
Chromium是一款独立的浏览器,是Google为发展自家的浏览器GoogleChrome而开启的计划,相当于Chrome的实验版,Chromium的稳定性不如Chrome但是功能更加丰富,而且更新速度很快,通常每隔数小时就有新的开发版本发布
2).asyncio
syncio是Python的一个异步协程库,自3.4版本引入的标准库,直接内置了对异步IO的支持,号称是Python最有野心的库,
转载请注明:http://www.aideyishus.com/lkzp/3561.html