龙空技术网

简单讲一下爬虫与反爬虫

TOMOCAT 342

前言:

现时姐妹们对“javascript反爬虫”大致比较关注,大家都想要学习一些“javascript反爬虫”的相关内容。那么小编在网络上搜集了一些关于“javascript反爬虫””的相关内容,希望同学们能喜欢,同学们快快来学习一下吧!

参考

本文参考自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,只摘录了部分内容用于初学者(惭愧的是,迄今为止我还没有写过爬虫程序)认识爬虫与反爬虫(我目前实习的公司也有统计去爬去刷的pv任务),有兴趣的同学可查看原文:

为什么要反爬虫

1、爬虫占总pv比例较高(尤其是三月份爬虫)

每年三月份携程都会迎接一次爬虫高峰期,原因在于每年三月份有大量的硕士论文写毕业论文需要数据,很多会选择爬取OTA(Online Travel Agency,在线旅行社)数据。

2、公司可免费查询的资源被批量抓取,丧失竞争力

OTA的价格在非登录状态下可直接被查询,很多其他公司的数据需要用户登录才能获取,这样可以通过封杀账号来抑制爬虫。在不能要求用户强制登录的情况下,竞争队友可以轻易获取携程的定价信息,从而陷入定价被动。

3、爬虫是否违法,是否可以起诉

作者咨询法务之后发现这在国内属于擦边球,还是需要技术手段做最后的保障。

爬虫的对象分类

1、学生

学生的爬虫通常简单粗暴,根本不管服务器压力,加上学生人数不可预测,很容易把站点搞挂。

2、创业小公司

很多大数据领域的创业小公司会通过爬虫获取数据。

3、无人管理的小爬虫

携程上的点评60%左右的访问量是爬虫, 被封锁之后他们除了http code是200之外,获取不到任何有效数据,但是他们仍然在孜孜不倦地运行。这可能是托管在某些服务器上的小爬虫,无人认领后一直在运行。

4、成型的商业对手

有钱、有技术和有耐心,只能和他死磕。

5、抽风的搜索引擎

抽风的搜索引擎会导致服务器性能下降,请求量和网络攻击没有什么区别。

爬虫与反爬虫

因为反爬虫是一个比较新的领域,作者给出了一些定义方便理解:

爬虫:使用任何技术手段,批量获取网站信息的方式。关键在批量。反爬虫:使用任何技术手段,组织别人批量获取自己网站信息的方式。误伤:在反爬虫的过程中,错误地将正常请求识别为爬虫。拦截:成功地阻止爬虫访问。通常拦截率越高误伤的可能性也越大,需要做个权衡。资源:机器成本和人力成本的总和。编写简单的爬虫

网络上找到的爬虫资料一般都是一段python代码,python是一门很好的语言,但是用来针对有反爬虫措施的站点做爬虫真的不是最优选择。通常搜到的python爬虫代码还会使用一个lynx的user_agent,很容易被针对。

编写爬虫程序一般有几个过程:

分析页面请求格式创建合适的http请求批量发送http请求,获取数据

举个例子,如果想要查看价格,那么抓取网络请求后哪个请求才是你想要的结果呢?

答案出乎意料的简单,你只需要根据网络传输数据量进行倒序排列即可。因为其他迷惑性的url再多再复杂,开发人员也不会舍得加数据量给它。

编写高级爬虫

进阶的爬虫包括以下几种:

1、分布式

分布式唯一的作用是防止对方封IP。封IP是终极手段,效果非常好,但是误伤用户后问题很大。

我防止封IP的方法是通过构造代理IP

2、模拟JavaScript

如果对方没有反爬虫,你完全可以直接抓ajax本身,而无需担心js如何处理。但是如果对方有反爬虫,那么javascript必然十分复杂,重点在于分析而不是简单的模拟。

换句话说,这应该是基本功

3、PhantomJs

这个东西本意用于做自动测试,但是因为效果很好,很多人拿来做爬虫。但是有个很明显的缺点就是效率低。

传统的反爬虫手段

1、封锁频繁访问的IP

能有效针对学生群体,但是有两个缺陷:容易误伤普通用户;IP成本低,拦截效果不佳

2、封锁访问超过阈值的session

这种做法效果其实更差,因为session完全不值钱,重新申请一个即可。

session:

在web开发中,服务器可以为每个用户浏览器创建一个会话(session)对象,当需要保存用户数据时,服务器程序可以吧用户数据写入到用户浏览器独占的session中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session取出该用户数据,为用户服务。

cookie和session都是常用的会话跟踪技术。cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。

3、封锁频繁访问的userAgent

User Agent简称UA,中文名是用户代理,属于http协议的一部分。向网页提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版来为用户提供更好的体验。UA是可以伪装的。

这个效果出奇得好,但是杀伤力过大很容易误伤,使用时必须非常小心。迄今为止携程只短暂封杀过mac下的火狐。

4、以上的组合

上面提到的方法,效果均一般,所以还是用JavaScript比较靠谱。

对反爬虫的处理

1、技术压制

正确的做法应该是适当压制但不封杀,防止对方死磕。

2、放一条生路

都是程序猿,给彼此一条活路,保持一个良性的竞争环境。

标签: #javascript反爬虫