写一个爬虫:SuperAgent VS Selenium

以前研究模拟登录的时候用superagent搞过一点,权当教务处的API,这次准备用Selenium做全套,主要还是实验室一直在吹Selenium怎么怎么好用,解决了多少多少难题,实际上!并没有!

这篇文章默默的来分析一下一些遇到的问题以及为什么我得出了以上的结论。

首先我们来考虑爬虫的两类情况,一种是大规模爬虫,那差不多就是蜘蛛,相当于每个网站都要爬,却没有特定的数据需求,这种时候很明显效率要高,速度要快,Selenium和直接取HTTP的方法差了一个浏览器打开+首屏渲染的时间。在这种情况下,通常我们是不用关心深爬情况的,只需要表层GET到的页面即可,用Selenium的需求就相对而言比较小,当然,这一情况下,首屏加载如果是客户端渲染的,那似乎就蜜汁尴尬,但是听说Google有魔改内核!(我相信应该比PhantomJS快了不少)

当然,大多数情况下,我们所要爬的数据都不是前者(所以以上就是口胡的)。而是特定领域我们有特定需求的情况下去一些同类网站去获取数据再进行处理,这种情况下,同类网站基本上是具体的网站列表,考虑到现行技术水平,基本上还是用规则去获取,同样是针对特定网站的规则,似乎两者就没有太大的差别了,但是实际上,在一些不需要模拟登录或者模拟登录没有前端加密的场合以及一些特定反爬手段的网站而言,Selenium都处于劣势,特别是如果有Canvas的图表的情况下,Selenium一点办法都没有!不然我觉得还可以抢救一下。

比如我要解决单点登录的问题,在上一个直接用HTTP的模拟登录中,我们只要设置好Header并且访问就行了,但是在Selenium中,由于我们不能直接跨域设置,不得不间接设置

更让我哭笑不得的是,本来只要一个请求的东西,因为Selenium的模拟人工操作,我不得不多写好多动作,从某种意义上来说,反而更加不便,而且异步的Ajax填充数据我不知道什么时候加载完!虽然有个动作可以监听是否产生指定DOM,但有一定局限性,特定需求下并不是很好用,不得不阻塞操作去等待,更加增加了时间开销。虽然我本身对时间开销没有太大需求,但这一来二去的,我再也忍不了了!本来就慢!现在更慢了!操作还更复杂!

当然不是说Selenium做爬虫完全没有可取之处,是在某些情况下它实在不合适,根本没有非要用的理由,不要总想着搞个大新闻觉得这样就秒天秒地了,目前接触下来它和传统爬虫适用的场景完全不一样,根本不具有可替换的价值,并且搞得我挖的坑都没心情填了!(口胡,明明是习惯性挖坑)

标签: 知识

已有 6 条评论

  1. evercx

    然而我还是没有成功用superagent解决模拟登陆的问题。。。。。。jsessionid藏在location字段里 superagent返回的响应头里拿不到。。。= =||| 不过我研究的是学生系统、教务处的模拟登陆不知道系统升级后有没有变过

    1. 有啥区别吗,入口都是那个

      1. evercx

        有区别 入口一样 但是地址里的查询字符串不一样 不同的字符串进去的不同的系统 不同的系统jsessionid也不一样......

        1. “原理”都一样啊 只要是你能从HTTP里看到的东西都能搞定

        2. 我刚试了一下 现在真是简单到吐血 比原来简单多了。。。。

        3. 你说的不同的系统……也就是不同的域名,CAS本来就是这样的东西,从login到portal到ecard当然cookie不一样

添加新评论