精华内容
下载资源
问答
  • Python爬虫、反爬虫和反反爬虫

    千次阅读 多人点赞 2018-05-03 20:02:31
    我主要对反爬虫和反反爬虫做一个简单的总结我想补充一下关于爬虫和反爬虫,以及为什么要爬虫,为什么要反爬虫,也就是从技术和技术带来的影响的角度来看待爬虫。发现一个很有意思的链接,爬虫、反爬虫、反反爬虫 1 ...

    我主要对反爬虫和反反爬虫做一个简单的总结

    我想补充一下关于爬虫和反爬虫,以及为什么要爬虫,为什么要反爬虫,也就是从技术和技术带来的影响的角度来看待爬虫。发现一个很有意思的链接,

    爬虫、反爬虫、反反爬虫

     

    1 爬虫、反爬虫、反反爬虫

    爬虫 —— 使用任何技术手段批量获取网站信息的一种方式,关键在批量。

    反爬虫 —— 使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。

    误伤 —— 在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。

    拦截 —— 成功地阻止爬虫访问。通常来说,拦截率越高的策略,误伤率就越高,因此要做权衡。

    资源 —— 机器成本与人力成本的总和。

    2 常见的爬虫、反爬虫、反反爬虫手段

    爬虫、反反爬虫反爬虫
    对某个网站或者APP的数据感兴趣。 [1] 
    首先分析网站/APP [2]的请求与返回数据,然后用python,或Java,或网上免费的抓取软件,不断遍历某列表抓取数据存数据库。 
     zabbix等监控显示某时间段请求陡增,ip相同,useragent还是JavaClient,直接Nginx封杀这个ip
    useragent模仿谷歌或者百度浏览器,再获取十几个代理ip,爬的过程中不断轮询替换ip 
     发现ip不断变化,直接每次请求添加用户是否登录的校验
    通过注册等各种方法,获取一个真实账号,模拟登录,每次请求携带登录产生的cookie或者token 
     健全账号权限体系,即拥有A的账号,无法获取账号B的数据访问权限。
    设置定时器,简单粗暴的直接爬取所有能爬取的数据 
     针对多IP的高频访问,Nginx设置频率限制,如某个ip短时间访问超过一定次数就直接屏蔽,一定程度增加爬虫方获取有效IP的成本
    写代码爬取ip代理网站,或者批量购买高匿代理ip,几千IP轮询爬 
     在访问频率上继续做文章,升级ip限制策略,加大ip限制的成功率。
    ip大量被封,为了解决这问题,开始模拟人类请求特征,比如每半小时爬取改为随机1-3秒爬一次,爬10次休息10秒,每天只在8-1218-0点爬,隔几天还休息一下。再比如为了减少请求,能只抓列表页就不抓详情页 
     此刻再在访问频率上做限制,可能会误伤真实用户。如果网站类型不太注重用户体验,可以访问一定次数强制弹框要求输入验证码
    简单的验证码,完全可以自学图像识别的教程(关键词PILtesseract),对验证码进行二值化预处理,分割,模式训练后,识别验证码 
     针对具有用户行为的爬虫,首先要明白,爬虫与人类在访问特征上最大的不一样在于,人不会长时间持续访问一个网站,而爬虫的访问数量会随着时间增长而线性增长。根据这特征,分析请求日志,设置ip黑名单
    由于各种限制,单个爬虫轮询ip模拟用户行为进行爬取,效率已经大大降低。这个时候有条件,可以考虑分布式,跨省跨机房,利用ADSL进行长期爬取 
     既然无法避免被爬,那就继续加大对方爬取成本
    如果死磕到底。。 
     只能硬着头皮和他继续死磕,直到一方因为机器成本与人力成本问题放弃。

    3 为什么需要反爬虫?

    l  公司的重要资源被批量爬取,丧失竞争力。

    l  爬虫占总PV比例太高,因为高访问量浪费了太多钱。

    l  爬虫拖垮了站点,严重影响了用户体验。

    l  资源被爬取难以起诉成功,对方可以肆意爬取

    4 反爬虫的一些措施

    反爬虫的关键在于阻止被批量爬取,重点在批量。反爬虫技术的核心在于不断变更规则,比如不断变更验证码。我们在内容上可以做如下文章:

    l  网站不同地方的文本内容添加不同的自带标签,增加对方数据清理难度。

    l  关键数据由文本转图片,甚至添加水印等。目前市场上图片ocr识别无法有效转文字,让对方即使获取了图片也无法有效使用。

    l  网站相关页面的列表查询,限制总页数的展示。比如数据一共1K页,相关接口却只对外展示前十页。对方找不到入口最多爬取10页数据。

    l  间接关闭网站核心数据查看入口,比如内容的查看像百度文库一样改为word、pdf或者ppt下载模式,高频下载需要验证码或者账号积分。

    l  网站不提供注册入口,或者注册需要内部推荐或者评审,加大爬虫方获取账号的难度。

    l  网站的请求url复杂化,比如弄的像淘宝一样没有规律,id改为UUID等。

    l  前端页面尽可能不暴露数据的唯一键,对唯一键如主键id等进行伪装,可以增加对方爬取后的去重成本。因为对方爬数据可能是在你的多个模块页面进行多维度爬取,会有大量的重复数据。

    l  前端html页面别一次性加载列表,根据用户点击js动态加载。即查询页面源码时,只能看到列表的第一条数据。

    l  当确定访问异常时,大量返回虚假数据。爬虫几乎没有判断数据真假的能力,只有人才有。对方发现的越晚,我们的处理应对时间就越充裕。

    l  核心数据提高安全等级,单独加密等。


    展开全文
  • 爬虫,反爬虫和反反爬虫

    千次阅读 2018-11-02 16:22:01
    随之大数据的火热,网络上各种网页抓取/爬虫工具蜂拥而来,因而,网页数据成了大家竞争掠夺的资源,但网站运营者却要开始保护自己的数据资源,以避免被竞争对手获取到... 一、什么是爬虫和反爬虫 一张图说明一切:...

    转自:https://blog.csdn.net/yixuandong9010/article/details/75861233

    随之大数据的火热,网络上各种网页抓取/爬虫工具蜂拥而来,因而,网页数据成了大家竞争掠夺的资源,但网站运营者却要开始保护自己的数据资源,以避免被竞争对手获取到自己的数据,防止更大的商业损失。下面总结一下反爬虫策略及其应对方法。 一、什么是爬虫和反爬虫

    一张图说明一切:

    爬虫和反爬虫作为相生相克的死对头,无论爬虫多厉害,都是能被复杂的反爬虫机制发现,同样的,无论反爬虫机制多么缜密,都是能被高级的网络爬虫所攻破,胜负的关键就看双方的资源投入多少了。为了更好地理解爬虫和反爬虫机制,下面有一些定义:

    爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。

    反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批量。

    误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。

    拦截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。

    所以,我们可以知道,爬虫有一个最基本的特征就是批量,而反爬虫机制也是根据这个特征来做判断的,但反爬虫还是一个权衡利弊的选择,既要较低的误伤率,又要较高的拦截率,这也是它的漏洞。关于网站为什么以及如何制定反爬虫策略,可以看携程酒店技术部总结的关于反爬虫的心得体会。

    二、反爬虫方法及其应对

    一般网站从三个方面反爬虫:请求网站访问时的请求头Headers,用户行为,目标网站的目录和数据加载方式。前两个方面可以说是反爬虫策略中最为常见的,而第三个则是应用ajax(异步加载)的方式加载页面目录或者内容,增大爬虫在对目标网站形成访问之后获取数据的难度。
    但是仅仅检验一下请求头或者做几个ip限制显然无法达到网站运营者对anti-spam的要求,所以更进一步的反制措施也不少。最主要的大概有:Cookie限制,验证码反爬虫,以及Noscript。

    2.1 通过Headers反爬虫
    从用户请求的Headers反爬虫是最常见的反爬虫策略。由于正常用户访问网站时是通过浏览器访问的,所以目标网站通常会在收到请求时校验Headers中的User-Agent字段,如果不是携带正常的User-Agent信息的请求便无法通过请求。还有一部分网站为了防盗链,还会校验请求Headers中的Referer字段。 如果遇到了这类反爬虫机制,可以直接在自己写的爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;另外通过对请求的抓包分析,将Referer值修改为目标网站域名,就能很好的绕过。
    2.2 基于用户行为反爬虫
    还有一些网站会通过用户的行为来检测网站的访问者是否是爬虫,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。 大多数网站都是前一种情况,对于这种情况有两种策略:
    1)使用代理ip。例如可以专门写一个在网上抓取可用代理ip的脚本,然后将抓取到的代理ip维护到代理池中供爬虫使用,当然,实际上抓取的ip不论是免费的还是付费的,通常的使用效果都极为一般,如果需要抓取高价值数据的话也可以考虑购买宽带adsl拨号的VPS,如果ip被目标网站被封掉,重新拨号即可。
    2)降低请求频率。例如每个一个时间段请求一次或者请求若干次之后sleep一段时间。由于网站获取到的ip是一个区域网的ip,该ip被区域内的所有人共享,因此这个间隔时间并不需要特别长
    对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。对于有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制,如果能有多个账户,切换使用,效果更佳。
    2.3 动态页面的反爬虫
    上述的几种情况大多都是出现在静态页面,但是对于动态网页,我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的。首先用Firebug或者HttpFox对网络请求进行分析。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。
    能够直接模拟ajax请求获取数据固然是极好的,但是有些网站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。还有一些严防死守的网站,除了加密ajax参数,它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。
    遇到这样的网站,我们就不能用上面的方法了,通过selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加
    Headers一定程度上就是为了伪装成浏览器),它本身就是浏览器,phantomJS就是一个没有界面的浏览器,只是操控这个浏览器的不是人。
    2.4 Cookie限制
    和Headers校验的反爬虫机制类似,当用户向目标网站发送请求时,会再请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页这个Cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。
    而Cookie校验和Headers的区别在于,用户发送的Headers的内容形式是固定的可以被轻易伪造的,Cookie则不然。原因是由于,我们在分析浏览器请求网站访问的过程中所分析得到的Cookie往往都是经过相关的js等过程已经改变了domain的Cookie,假如直接手动修改爬虫携带的Cookie去访问对应的网页,由于携带的Cookie已经是访问之后的domain而不是访问之前的domain,所以是无法成功模拟整个流程的,这种情况必然导致爬虫访问页面失败。 分析Cookie,可能会携带大量的随机哈希字符串,或者不同时间戳组合的字符串,并且会根据每次访问更新domain的值。对这种限制,首先要在对目标网站抓包分析时,必须先清空浏览器的Cookie,然后在初次访问时,观察浏览器在完成访问的过程中的请求细节(通常会在这一过程中发生若干次301/302转跳,每次转跳网站返回不同的Cookie给浏览器然后在最后一次转跳中请求成功)。在抓包完成对请求细节的分析之后,再在爬虫上模拟这一转跳过程,然后截取Cookie作为爬虫自身携带的Cookie,这样就能够绕过Cookie的限制完成对目标网站的访问了。
    2.5 验证码限制
    这是一个相当古老但却不失有效性的反爬虫策略。更早的时候,这种验证码可以通过OCR技术进行简单的图像识别破解,但是现在来说,验证码的干扰线,噪点已经多到肉眼都无法轻易识别的地步。所以目前而言,由于OCR技术发展不力,验证码技术反而成为了许多网站最有效的手段之一。
    验证码除了识别难题之外,还有另外一个值得注意的问题。现在有许多网站都在使用第三方验证码服务。当用户打开目标网站的登录页面时,登录页面显示的验证码是从第三方(比如阿里云)提供的链接加载的,这时候我们在模拟登录的时候,需要多一步从网页提供的第三方链接抓取验证码的步骤,而这一步常常暗含着陷阱。以阿里云提供的验证码服务为例,登录页面的源代码会显示阿里云提供的第三方链接,但是当匹配出这个链接进行验证码抓取的时候我们会发现验证码是无效的。当仔细分析抓包的请求数据之后,发现正常浏览器在请求验证码时,会多带一个ts参数,而这个参数是由当前时间戳产生的,但是并不是完全的时间戳,而是时间戳四舍五入保留九位数字之后的字符串,对待这种第三方服务只能是细心加运气,三分天注定七分不信命来猜一发了。还有另外一种特殊的第三方验证码,所谓的拖动验证,只能说,互联网创业有三种模式2b,2c,2vc。

    展开全文
  • 博主已经好几个月没有更新文章了,原因就是最近在搞一个反反爬虫练习平台给予大家免费使用。 属实不会编写文案,所以粗制滥造的话语请大家不要建议,主要还是介绍《平头哥反反爬虫练习平台》,平台网址在最下方。 ...

    前言

    博主已经好几个月没有更新文章了,原因就是最近在搞一个反反爬虫练习平台给予大家免费使用。
    属实不会编写文案,所以粗制滥造的话语请大家不要建议,主要还是介绍《反反爬虫练习平台》,平台网址在最下方。

    爬虫

    根据百度百科的解释:

    网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

    危害:

    因为爬虫的出生,这对于最初期的大部分网站有非常大的危害。
    因为爬虫能把网站所有能展示的数据全部爬取下来为自己所用,这对于网站主人来说是非常不利的,对于服务器来说也是有非常大的影响,这时候聪明的程序员就开始构造一个反爬虫的操作。

    反爬虫

    根据百度百科的解释:

    网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
    但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护。
    于是,很多网站开始反网络爬虫,想方设法保护自己的内容。
    他们根据ip访问频率,浏览网页速度,账户登录,输入验证码,flash封装,ajax混淆,js加密,图片,css混淆等五花八门的技术,来对反网络爬虫。
    防的一方不惜工本,迫使抓的一方在考虑成本效益后放弃
    抓的一方不惜工本,防的一方在考虑用户流失后放弃
    参考: 美国高级情报官员透露,美国国家安全局前雇员斯诺登仅仅是利用普通的网络爬虫软件(Webcrawler),从国安局网络里面截取大量的机密文件与资料.
    反网络爬虫:越来越成为一种新的行业

    反反爬虫

    反反爬虫就是针对于反爬虫的(有点太水了)

    反反爬虫练习平台

    注意:平台仅仅提供给大家学习使用的,请勿用于任何商业用途!
    平台有任何侵权行为请立即联系QQ:1670044143,我将在第一时间进行休整及改善!
    反反爬虫练习平台》开放于所有人,不管你是刚入门的新手还是资深的大佬都可以过来注册登陆使用,对于想知道自己的水平掌握几何就过来练习练习,对于新手想快速入门的也过来练习练习,无害于自己,有益于自己,为啥不过来体验体验呢?
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    邀请码获取

    为什么要搞一个邀请码呢?

    主要原因是怕别人故意破坏,以及利用注册功能的发送邮件对别人实施一个邮件轰炸的目的。

    如何获取呢?

    免费途径:通过添加博主QQ(1670044143)获得邀请码。
    付费途径:通过付费添加QQ群(855262907)获取邀请码。

    博主不是说免费获取吗?为啥又搞个付费获取的途径呢?两者有什么区别呢?会不会区别对待啊?博主会不会提供答案和帮助啊?

    1.反反爬虫练习平台确实是免费开放的。
    2.博主花费了时间精力开发此平台,域名(备案中)、服务器都是自费的,付费途径仅仅对于愿意资助平台持续开放的。
    3.入群后可以跟志同相合的人一起交流谈论。
    4.博主不会区别对待任何一个人,因为大家都是热爱这个行业的人。
    5.不会提供任何帮助和答案,平台答案不由博主公开,其他任何人可以无需经过博主同意自行公开答案和流程。

    提供题目

    《反反爬虫练习平台》欢迎大家提供题目,平台也需要大家一起维护和发展。
    题目提供联系博主QQ即可。

    展开全文
  • 反爬虫策略手段 正所谓魔高一尺道高一丈 robots协议 反爬虫策略 反反爬虫策略
  • 首先我们声明的是,爬虫和反爬虫没有高低之分,虽然总有一种方法能突破你的安全保护。 爬虫就像是一个钉子,反爬则是一扇铁窗。钉子坚持不懈,总能搞破窗。但是窗户是不能只针对于一点全力打造的。从此,修修补补,...

    最近一直在用django写一个个人音乐在线播放平台。
    其中在网页数据保护方面,我采取了很多种的反爬虫措施,所以在本篇文章中,我从源码和实际操作上给大家分析下我所使用的反爬虫及其对应的破解技巧。

    首先我们声明的是,爬虫和反爬虫没有高低之分,虽然总有一种方法能突破你的安全保护。
    爬虫就像是一个钉子,反爬则是一扇铁窗。钉子坚持不懈,总能搞破窗。但是窗户是不能只针对于一点全力打造的。从此,修修补补,一般双方不下班不休。
    下面我把反爬和反反爬分开来写。这样爱好不同的人可以各取所需。

    反爬虫:

    1、我在django-views中设置了登录身份验证,设置了装饰器,通过META.get获取请求头,限制请求头和访问间隔。

    lxcsdn = ["https://blog.csdn.net/weixin_43582101/column/info/33034",
              "https://blog.csdn.net/weixin_43582101/article/details/86563910",
              "https://blog.csdn.net/weixin_43582101/article/details/86567367",
              ]
    '''设置请求头和访问间隔'''
    ips = [None]      #存储客户端最后一次访问的ip地址   空列表也是列表,None类型只有None一个值
    ## ips=[None] 为了防止 list index out of range。
    last = 0           #存储客服端最后一次访问时间
    def isCraw(func):
        def wrapper(*args,**kwargs):
            global ips,last       #声明全局变量
                   #request.META 是一个字典,包含了所有本次HTTP请求的Header信息
            agent = args[0].META.get('HTTP_USER_AGENT') #获取请求头部信息
            if 'Mozilla' not in agent and 'Safari' not in agent and 'Chrome'not in agent:
                return HttpResponse(random.choice(lxcsdn))
            else:
                ip = args[0].META.get('REMOTE_ADDR') #客户端IP地址
    # 什么是remote_addr:
    # remote_addr 是服务端根据请求TCP包的ip指定的。假设从client到server中间没有任何代理,
    # 那么web服务器(Nginx,Apache等)就会把client的IP设为IPremote_addr;
    # 如果存在代理转发HTTP请求,web服务器会把最后一次代理服务器的IP设置为remote_addr
                now = time.time()
                if ip==ips[0] and now-last<2:            #为了防止误伤
                    return HttpResponse("Are you curious about what happened? If you read this sentence carefully, you will know what happened. so the page is not found , But is you didn't find it ! " )
                last = now
                ips.pop()
                ips.append(ip)
                return func(*args,**kwargs)
        return wrapper
    

    !记得上面是一个装饰器。
    mete.get可以获取请求头部的信息。如果没有请求头User-Agent的话,就只能请求到我的csdn博客链接。在最下面记录了上一次到这一次访问的ip时间,如果频率小于2秒就会跳转到错误页面。

    2、设置了cookie和登录成功后的session,并通过url编码方式隐藏cookie
    cookie和session是网站的必须品,但是有的爬虫会通过cookie直接省去登录来访问你的主页从而提取数据。
    因为url编码方式不支持中文,所以我们可以设置为中文及外文的cookie。
    大致如下:

     response.set_cookie(getPassword(urlquote("你好")),getPassword(urlquote("公正法治民主")))
                            response.set_cookie((urlquote("아니카시유")),(urlquote("아니카시유아니카시유")))
    

    在控制台上显示的内容则是:
    在这里插入图片描述
    这可以起到一定程度的反爬虫作用。当然你也可以使用已经加密过的数据,来加大爬虫破解的难度。

    3、设置了自动刷新login页面,30秒计时。
    为了防止selenuim和无界面浏览器的侵袭,只能尽量的牺牲一点用户体验,我们把浏览器刷新时间控制在30秒左右,运行缓慢的无界面浏览器就会很难受了。
    这里我用JS来实现的。

       function myrefresh() {
            window.location.reload();
            }
            setTimeout('myrefresh()', 30000);
    

    4上面设置了30秒的时间是不够的,所以我在登录界面设置了验证码,这样也能隔绝一大部分的爬虫初学者。

    首先我写了一个鼠标移入显示图片的方法。因为要考虑到用户体验,又要考虑到selenuim的登录。所以我设置的标签为,鼠标移入外面的div,显示里面的图片,所以selenuim去获取里面图片的属性时,是获取不到的。
    在这里插入图片描述
    在这里插入图片描述
    点击刷新验证码:为什么要写这个呢,对方如果通过点击触发图片的话,可能会在点击很触发的图片已经跟开始的不一样了,这个我也没试过,应该是这样。

       function refresh(ths)
                {ths.src = ths.src + '?'}
    

    这个写起来特别简单,只需要在原click方法上给url+上一个?就可以重复请求。(如果两次请求url相同是不能刷新图片的)

    下面是验证码生成的代码:
    (本篇代码为了方便讲解,我都写在视图中,有不懂请留言)

    def auth_code(request):
        size = (143,40)
        width,height = size
        font_list = list("abcdefghklmpqrstuvwxyz*#%0123456789")
        c_chars = " ".join(random.sample(font_list,5))
        request.session['auth'] = c_chars.replace(' ','')
        img = Image.new("RGB",size,(30,31,42))
        draw = ImageDraw.Draw(img)
    
        # for i in range(random.randint(1,7)):
        #     draw.line(
        #         [
        #             (random.randint(0, 150), random.randint(0, 150)),
        #             (random.randint(0, 150), random.randint(0, 150))
        #         ],
        #         fill=(0, 0, 0)
        #     )
        # for j in range(1000):
        #     draw.point(
        #         (    random.randint(0, 150),
        #              random.randint(0, 150)
        #         ),
        #         fill = (0, 0, 0)
        #     )
    
        font = ImageFont.truetype("simsun.ttc", 23)
        draw.text((5,4),c_chars,font=font,fill="white")
        params = [1 - float(random.randint(1, 2)) / 100,
                  0,
                  0,
                  0,
                  1 - float(random.randint(1, 10)) / 100,
                  float(random.randint(1, 2)) / 500,
                  0.001,
                  float(random.randint(1, 2)) / 500
                  ]
        img = img.transform(size, Image.PERSPECTIVE, params)
        img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
    	img.save(buf,'png')
    	return HttpResponse(buf.getvalue(),)
    

    5、因为只是这样我感觉力度还是不够,有耐心的selenuim还是可以很快破解的。所以我从属性上来限制一下PhantomJS和selenuim。
    这个限制是用js来写的。
    …我刚突然发现我把这页的JS混淆压缩加密了,不过可以拿去直接用。

     window.onload=function(){
        if (navigator.webdriver) {
            eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('0 1=\'﷩\';',2,2,'var|a'.split('|'),0,{}));
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('0 1=\'﷩\';0 1=\'﷩\';0 1=\'﷩\';0 1=\'﷩\';',2,2,'var|a'.split('|'),0,{}));
                window.location.href="https://www.hexu0614.com/blog/blogs/12/"}
        else if(/HeadlessChrome/.test(window.navigator.userAgent)) {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/6/";}
        else if(navigator.plugins.length === 0 || !navigator.plugins.length) {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/33/";}
        else if(navigator.languages === "") {
            var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
    var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';var a = '﷩';
                window.location.href="https://www.hexu0614.com/blog/blogs/5/";}
    // {#  获取图片判断  #}
        var body = document.getElementsByTagName("body")[0];
        var image = document.createElement("img");
        image.src = "/static/tboys/img/login_ico.png";
        image.setAttribute("id", "auth_img");
        body.appendChild(image);
        image.onerror = function(){
            if(image.width === 0 && image.height === 0) {
                window.location.href="https://www.hexu0614.com";
            }}
        };
    

    首先上文中的方框是selenuim不能是别的字符集,会影响他的读取操作,有限制作用,如果添加的够多的话,可能会把他搞崩溃。
    第一个if的作用是,如果访问的驱动是webdriver的话,就把页面跳转到别的地方。后面的两个作用是:通过判断访问来源的长度和语言来判断是不是无界面浏览器。最后面那个是通过对图片的识别方式来判断是不是无界面浏览器。
    因为无界面浏览器在访问图片的时候,他的访问得到的图片宽高都是0;并且无界面浏览器的语言默认为空,长度默认为0.

    6、设置了form表单post请求,通过display:none+hidden进行加密隐藏
    这个是常见的form表单。我通过大量的display:none 和标签的隐藏,来干扰爬虫对页面的判断和控制。从而去增加爬虫的难度。
    并且可以给爬虫布置下一个蜜罐,让他一步一步进入错误的路径,并且毫不知情…
    在这里插入图片描述

    7、将主页音乐链接数据保存在.js中,JS文件经过混淆压缩加密。
    假设对方破解了验证,通过登录到了主页中。也是很难发现他所需要的数据的。页面信息中并没有url信息。
    在这里插入图片描述
    我的url如下:
    在这里插入图片描述
    由于我的数据没有更新完成,这里并没有使用JS加密。
    当你想加密JS可以去下图所示
    在这里插入图片描述
    或者自己找一个靠谱的,因为有的时候加密完,会把功能也给加密没了。
    大家要一边尝试一边加密。

    8、设置iframe。iframe 元素会创建包含另外一个文档的内联框架(即行内框架)
    效果是这样的。
    在这里插入图片描述
    页面:
    在这里插入图片描述
    控制台显示如下:
    在这里插入图片描述
    你可以通过多个iframe来干扰爬虫的视角,隐藏自己的url。
    在这里插入图片描述

    9、比较难受人的一种css方法,通过字符集映射来改变页面信息和源码信息的不同。
    利用前端字体文件(.ttf)混淆文本来阻止爬虫爬取网站数据.这个我不详细介绍了,举几个列子,大家可以网上搜索下具体操作。

    • 1 FONT-FACE拼凑式
    • 2 BACKGROUND拼凑式
    • 3 字符穿插式
    • 4 伪元素隐藏式
    • 5 元素定位覆盖式
    • 6 IFRAME异步加载式
    • 7 字符分割式
    • 8 字符集替换式

    在这里插入图片描述
    在这里插入图片描述
    看起来是不是很刺激。
    大家可以用fontcreator工具来构建自己的字体,然后在html页面导入自定义字体。

    还有点什么反爬方式,我忘记了。。先不写了。
    下面我们来逐条破解上面的反爬措施。

    反反爬虫:

    1、根据表单formdata数据,去提交对应数据。
    2、仔细仔细再仔细
    3、通过urldncode解密
    4、通过图像识别,打码平台,或者软件工具来进行验证码处理
    5、JS数据清洗,数据解密。
    6、根据网站设置的限制方式,改变我们请求频率和请求内容。
    7、用fontcreator来找出字符集加密规律。
    8、使用无头浏览器,就去逐情改变他的属性
    算了 不写了。反反爬的攻略太多了。大致上了解一下网上到处都是。
    等到你越到的时候再查就行了。

    展开全文
  • 主要介绍了详解python 破解网站反爬虫的两种简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 淘宝、京东反反爬虫爬取手机信息 应对反爬的方式:使用 selenium 模拟浏览器方式爬取,先通过以某个端口打 开 chrome 浏览器,手动登录淘宝,防止留下 selenium 指纹被淘宝封号: 再通过 9399 端口将浏览器控制...
  • Django反爬虫和反反爬虫实战讲解

    千次阅读 2019-04-18 23:52:24
    反爬虫 1、我在django-views中设置了登录身份验证,设置了装饰器,通过META.get获取请求头,限制请求头访问间隔 lxcsdn = [“https://blog.csdn.net/weixin_43582101/column/info/33034”, ...
  • 本文详细介绍了网站的反爬虫策略,在这里把我写爬虫以来遇到的各种反爬虫策略应对的方法总结一下。 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。这里我们只讨论数据采集部分。 一般网站从三个方面...
  • Python爬爬虫虫与与反反爬爬虫虫大大战战 这篇文章主要介绍了Python爬虫与反爬虫的相关资料文中讲解非常细致帮助大家更好的理解Python爬虫与反 爬虫的关系感兴趣的 友可以了解下 爬虫与发爬虫的厮杀一方为了拿到数据...
  • 反反爬虫的代码仓库

    2019-11-03 15:58:48
    越来越多的网站具有反爬虫特性,有的用图片隐藏关键数据,有的使用反人类的验证码,建立反反爬虫的代码仓库,通过与不同特性的网站做斗争(无恶意)提高技术。
  • 爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到... 成本:反爬虫也是需要人力机器成本 拦截:成功拦截爬虫,一般拦截率越高,误伤率也就越高 反爬虫的目的 初学者写的爬虫:简单粗暴,不管对端服
  • 什么是爬虫和反爬虫

    千次阅读 2020-02-24 11:53:03
    什么是爬虫和反爬虫? 爬虫:使用任何技术手段,批量获取网站信息的一种方式。 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。 常见的反爬虫机制 通过UA 识别爬虫 有些爬虫的UA是特殊...
  • 本人多年使用的爬虫与反爬虫经验 原理+中间件+源代码 各种爬虫技术+针对各种爬虫而开发的反爬虫技术
  • 喜欢爬虫的伙伴都知道,在爬网站的内容的时候并不是一爬就可以了,有时候就会遇到一些网站的反爬虫,折回让你爬不到数据,给你返回一些404,403或者500的状态码,这有时候会让人苦不堪言,就如我昨天发的爬网易云...
  • 主要给大家介绍了一些关于爬虫和反爬虫的简略方案的相关资料,文中介绍的非常详细,对大家理解和学习爬虫与反爬虫具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 本人是python新手,目前在看中国大学MOOC的嵩天老师的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息 以下是代码: import requests import re def getHTMLText(url): try: r = requests.get(url, timeout=30)...
  • robots.txt使用方法 反爬虫 SEO.zip
  • 主要介绍了浅谈Scrapy框架普通反爬虫机制的应对策略,具有一定借鉴价值,需要的朋友可以参考下
  • 爬虫和反爬虫 爬虫工程师的手段 从渲染好的 html 页面直接找到感兴趣的节点,然后获取对应的文本 去分析对应的接口数据,更加方便、精确地获取数据 反爬虫: 基于用户行为 检测cookie,封ip 动态网页 某一时间内请求...
  • 极验陈博-智能反爬虫试炼之路.pdf
  • 主要介绍了selenium 反爬虫之跳过淘宝滑块验证功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了python破解网易反爬虫机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 爬虫和反爬虫日益成为每家公司的标配系统。爬虫在情报获取、虚假流量、动态定价、恶意攻击、薅羊毛等方面都能起到很关键的作用,所以每家公司都或多或少的需要开发一些爬虫程序,业界在这方面的成熟的方案也非常多;...
  • 1 反爬虫技术及突破措施 1.1 降低请求频率 降低请求频率以模仿人类用户,而不是机器。 settings.py中设置DOWNLOAD_DELAY即可 # 即两次请求间隔为 3 秒 DOWNLOAD_DELAY = 3 另外,为了防止请求过于规律,可以使用...
  • 文章目录前景摘要字体反爬虫突破字体反爬虫思路的探索最终突破快手反爬虫代码 前景摘要 最近一个朋友问我,字体反爬虫的事,他发给我一个快手网站,我由于比较忙没回他,于是后来他说解决不了就要上scrapy框架,我是...
  • 主要介绍了Python反爬虫伪装浏览器进行爬虫,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,894
精华内容 13,557
关键字:

反爬虫和反反爬虫

爬虫 订阅