如何将爬虫完全伪装成为用户在浏览器的点击行为

转载自:http://blog.csdn.net/china1000/article/details/39157387


另外解密恶意广告主识别的文章,据说涉密了,因为担心公司的保密协议,先删除了安全第一。

    本文讲述了一种使用浏览器内核进行伪装的新爬虫,它可以轻易的欺骗CNZZ的数据统计,抓取动态内容。我首先介绍了常见的浏览器内核、浏览器内核的UserAgent,网站代码加载执行过程,随后又具体介绍了该动态爬虫的实现方法。

    其实讲到爬虫的伪装,我们就要首先讲一下网站站长和爬虫的对抗之路。具体的可以参考参考文献 一---互联网网站的反爬虫策略浅析。

    总的来讲互联网网站的反爬虫的策略可以通过检测爬取频率、并发连接数目、http请求header包括refererUserAgentjs统计的网站日志和访问日志比对、js判定User AgentIP访问次数来甄别一个请求是不是爬虫。那么这些策略我们应该如何应对呢?我们可以把爬虫完全伪装成为网民的浏览行为,从而躲避大部分的反爬虫策略么?答案是肯定的,我们可以通过操作浏览器内核来控制对一个网站的访问,并且伪造以上提到的检测数据。当然访问频率,并发数目这些是无法逃避的,如果你有足够的耐心和足够多的机器、足够多的代理,总是可以抓取到足够多的信息的么。

一、浏览器内核介绍

    首先介绍一下浏览器内核的信息,目前网民们用的浏览器有很多qq浏览器,360浏览器,猎豹浏览器、搜狗浏览器、海豚浏览器、百度浏览器等等,可是这些都是基于国外的浏览器内核做了后续的开发,加上外壳进行界面美化后得到的。其实主流的浏览器内核主要有一下5种:

   1. Trident内核:IE内核,IE 8 9 10 都在使用,它是闭源的。qq浏览器,猎豹浏览器,360浏览器。。。。其实大多数国内的浏览器都会支持的,不过微软的东西一般会比较慢,所以很多国内的浏览器都是双内核的,一般基于webkit+trideng或者webkit+blink

    2. webkit内核:Safari浏览器内核,qq浏览器,猎豹浏览器等等。

    3. Gecko内核:Firefox浏览器内核。

    4. Presto内核:Opera内核,据称已经废弃。

     5.Blink内核:Chrome内核,360极速浏览器也在使用。其实也就是基于webkit的,但是某一段时间后谷歌做了很多优化,突然觉得webkit很不爽就把webkit的大部分代码都替换了,于是就出现了Blink内核。就是据说的chromium内核,好像现在很多浏览器用的也已经是blink内核了。

二、常见浏览器内核的User Agent

  然后我们在讲一下常见的浏览器的User Agent

   1. QQ浏览器: Mozilla/5.0 (compatible; MSIE 10.0; WindowsNT 6.1; WOW64; Trident/6.0; QQBrowser/7.7.24962.400)   

    2. IE浏览器:Mozilla/5.0 (compatible; MSIE 10.0;Windows NT 6.1; WOW64; Trident/6.0)

   3.猎豹浏览器: Mozilla/5.0 (compatible; MSIE 10.0;Windows NT 6.1; WOW64; Trident/6.0) LBBROWSER

    然后呢,讲了这么多浏览器内核,也有很多基于这些内核的开源项目或者js解释引擎。如phantomjscapherjsnode.js、还有基于谷歌的V8 js解释引擎。

三、网站加载过程中不同的代码执行位置和顺序:

  后面我们再介绍一下网站的代码执行,首先我们向服务器发送请求,这时服务器的后台php java代码都会执行,然后网站代码被发送到本地,在本地时jsajax会在浏览器内核中之行。了解这个很重要,这样我们就知道我们的爬虫不仅要欺骗php java代码还要欺骗jsajax代码。

 

    我们可以就以phantomjs为例子吧,phatomjs是一个对webkit浏览器内核做的javascrpit封装,它支持丰富的API,并且效率也不错(对比微软的webbrowser封装)。那么我们下面就会讲一下,我们对基于phantomjs的爬虫的伪装吧:

    1.伪装http header,我们可以使用phanomjsAPI来实现:

         

派生到我的代码片

1.  <span style="font-family:SimSun;font-size:18px;">page.customHeaders = {  

2.          "Referer" : referrer,  

3.          "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER 1.1"  

4.  };</span>  



    2.伪造referer欺骗js,这一点其实就要麻烦一些:我们需要首先打开referer页面,然后再模拟点击消息转到目的网站,具体方法如下:


1.  <span style="font-family:SimSun;font-size:18px;">page.onLoadFinished = function(status){  

2.    

3.      // Only once do  

4.      if ( page.firstLoad ) {  

5.          page.firstLoad = false;  

6.          // Inject and Click a Link to our target  

7.          page.evaluate(function (href) {  

8.              // Create and append the link  

9.              var link = document.createElement('a');  

10.             link.setAttribute('href', href);  

11.             document.body.appendChild(link);  

12.               

13.             // Dispatch Click Event on the link  

14.             var evt = document.createEvent('MouseEvents');  

15.             evt.initMouseEvent('click'truetrue, window, 1, 1, 1, 1, 1, falsefalsefalsefalse, 0, link);  

16.             link.dispatchEvent(evt);  

17.         }, targetUrl);  

18.     } else {  

19.            // 此处我们已经成功伪造referer信息,并且打开Target url页面  

20.         console.log(targetUrl+"\t"+page.url);  

21.   

22.     };  

23. };</span>  

     3.伪造User Agent欺骗js,这一点其实就要麻烦一些,但是我们也可以通过phantomjsAPI来实现:

在CODE上查看代码片

1.  <span style="font-family:SimSun;font-size:18px;">page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER";</span>  


    4.
使用代理,这个phantomjs支持的就更好啦,调用的时候加入代理的参数即可:

派生到我的代码片

1.  <span style="font-family:SimSun;font-size:18px;">phantomjs --proxy=ip:port</span>  

 

   5.添加cookies(我知道phantomjs设置cookies可行,目前还没有验证,据称有以下三种方法):


page.customHeaders = {Cookie: xxx}

phantom.addCookie({
  'name':     'yandexuid',
  'value':    '21611441383258191',
  'domain':   '.yandex.ru'))
});

phantomjs --cookies-file=cookies.txt


     
说到这里其实我们已经得到了一个动态的爬虫,它可以之行js代码,可以抓取到网页的动态内容,具有浏览器的header并且无法被jsajaxjavaphp代码识别,甚至也无法被后台的日志分析识别。目前为止该方法的qps并不高,因为加载js和phantomjs并发性能不高。

      其实这个爬虫有很多的用处:

       1.伪造点击信息,最近CNZZ公布了中小网站的流量来源中30%是来自奇虎360的,众所周知CNZZ是植入js代码统计网站的访问量和来源的。这些完全可以用我们的代码伪造访问量,并且伪造访问来源呀。

       2.  爬取网站动态内容,有很多网站是基于ajaxjs设计的,现在我们就可以爬取到这些代码执行得到的数据。

        3.逃避反爬虫策略,这个就太明显了。

        4.可以用来做作弊器么?其实完全可以的,我们可以操作phantomjs,伪造所有的数据,操纵这个爬虫使用代理在互联网上到处浏览,并且传出所有我们想伪造的参数,甚至包括鼠标行为、浏览行为。目前据我所知不止可否伪造移动端的屏幕大小等信息。

  另外博主做了一些数据挖掘的工作,最近在研究补习机器学习和最优化、和统计的知识,后面也会写一些心得,希望有人可以一起讨论。我也在寻找数据挖掘和机器学习的工作机会,希望做数据挖掘机器学习相关,你有好机会么,博主会非常感谢你的,如索要简历,请联系:china1000_mail@126.com

  另外解密广告反欺诈文章,据说涉密了,因为担心公司的保密协议。所以先删除了。

参考文献:

[1] 互联网网站反爬虫策略: http://robbinfan.com/blog/11/anti-crawler-strategy

[2] phantomjs官网: http://phantomjs.org/

[3] 反爬虫策略开源代码https://github.com/csdn-dev/limiter

[4] HTTP HEADER详解http://www.open-open.com/lib/view/open1342064478859.html

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值