您的位置:首页 > 其它

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

2014-09-18 21:41 295 查看
转载自:http://blog.csdn.net/china1000/article/details/39157387

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

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

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

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

一、浏览器内核介绍

首先介绍一下浏览器内核的信息,目前网民们用的浏览器有很多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解释引擎。如phantomjs、capherjs、node.js、还有基于谷歌的V8
js解释引擎。

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

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

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

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





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', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 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,这一点其实就要麻烦一些,但是我们也可以通过phantomjs的API来实现:




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并且无法被js、ajax、java、php代码识别,甚至也无法被后台的日志分析识别。目前为止该方法的qps并不高,因为加载js和phantomjs并发性能不高。

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

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

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐