用java编写“百度广告点击机器人”
你在百度上搜索传智播客和java培训,就会看到一些广告链接,只要你随手点击一下这些广告链接,就会消耗广告发布商的费用,广告发布商必须为这次点击付出相应的广告费。一些人想通过点击竞争对手在百度上的广告链接,来达到消耗竞争对手的广告经费和打击竞争
你在百度上搜索“传智播客”和“java培训”,就会看到一些广告链接,只要你随手点击一下这些广告链接,就会消耗广告发布商的费用,广告发布商必须为这次点击付出相应的广告费。一些人想通过点击竞争对手在百度上的广告链接,来达到消耗竞争对手的广告经费和打击竞争对手之目的,这种点击真的能够给竞争对手带来很大的经济损失吗?其实,这样的随手点击对广告发布商根本就造成不了很大的影响,这就好比一个商家在大街上派发宣传单,肯定有很多传单是浪费了,只要不是派单人员把整包宣传单直接扔到垃圾桶,这就在商家接受范围之中,商家最终的广告宣传效果还是能达到其预期目标的。
有人也许会想到反复点击竞争对手的广告来消耗掉竞争对手的很多广告费用,让竞争对手的广告计划落空!这种想法显然过于简单了,因为这种想法不仅你有,很多人都有过,百度当然也会考虑到,并采取了一些技术手段予以防范。即使你采用动态拨号方式上网、不断重新拨号改变IP地址,一台计算机在一天之内对同一个广告链接无论点击多少次,百度后台对此都只收取1或2次的点击费用。
对Web网站开发技术比较了解的人都应该清楚,百度之所以能够识别出是否是来自同一台计算机的访问,这依赖的技术必然是Cookie,所以,我们只要清除掉浏览器的Cookie,再加上动态拨号改变IP的方式重复百度的搜索和点击搜索结果页面中的广告链接,百度就会把这些广告点击当作是来自多台计算机,就会对每次点击进行计费。如果采用人工方式来重复这些动作,只要坚持不懈,一定能给竞争对手带来较大的广告经济损失,但是,你给竞争对手造成这些损失时,自己也要花费大量的精力,仔细算一笔帐,你就会发现这完全是一种“杀敌三千,自损一万”的玩法,最后的赢家只有百度。
由于“传智播客”已经成了“java培训”和“.net培训”领域里的著名品牌,每天通过百度搜索“传智播客”的网友很多,于是,一些精明的培训机构就打起了借力“传智播客”推销自己的主意,在百度上购买了“传智播客”这个关键字的广告,大家现在在百度上搜索“传智播客”,仍然能够看到一些培训机构的广告链接。这犹如一个竞争对手在自家门口派发宣传单,要是线下,可能早就打起仗了,但是,这是在互联网上,彼此不照面,人家是“光脚的不拍穿鞋的”,那些不知名的培训机构就想赖着那些有名气的培训机构,你能奈他如何?难道真的就没有反制手段了吗?传智播客的专家们经过开会讨论研究,决定为了自卫,委托我来研究和制作“百度广告点击机器人”,或者叫着“百度广告自动点击工具”。经过八天的艰苦努力和大量的测试验证,一个完美的“百度广告点击机器人”终于完工了,其中很多时间都花费在了测试和等待结果上,因为百度后台并不是在点击发生时立即计费,而是每次查询某个关键字的点击费用时,它只统计1个小时前发生的点击量,为了看到百度后台是否对“百度广告点击机器人”触发的点击进行了计费,我们在百度上专门做了一些研究用的推广关键字,每次修改程序和运行后都必须等待1个小时以上才能去验证结果,只有百度后台确实扣除了我们这些关键字的广告费后,我们才能确定“百度广告自动点击工具”程序确实成功了,并且还必须进行高强度的测试,才能确认我们的“百度广告点击机器人”是否具有实用价值和有多大的威力,前前后后的实验测试就花掉了我们好几百元的广告费。
通过对“百度广告点击机器人”的研制和测试,我们肯定了百度广告在防止恶意点击上做得还是非常牛x的,即使使用我们的“百度广告点击机器人”,我们也无法在短时间内消耗掉那些挑衅竞争伙伴们的大量广告费,因为百度统计计费并不是实时的,它是统计某个关键字在上一个小时内发生的点击总量,如果这个点击总量很大,远远超出以往的同比时间段的统计数,百度后台就会按照某种算法将超出的点击量扣除掉。我们只能调低“百度广告点击机器人”的点击频率,但是,点击频率调得太低,这个“百度广告自动点击工具”就没有什么实用价值了,如果点击频率调得太高,就会被百度认为是恶意点击而作废,白白辛苦了半天!这个点击频率到多少才合适,显然要花费大量时间和拿自己的广告费做试验才能得到,所以,我们的“百度广告自动点击工具”虽然程序上是完全测通了,但是由于百度对某个关键字在单位时间内发生的点击总量的限制,导致这个“百度广告自动点击工具”无法实现我们的初衷,这不是我们的“百度广告点击机器人”无能,而是百度后台做得实在太智能了,真是“魔高一尺、道高一丈”啊,即使你能同时号召一千个人去点击百度上的某个广告链接,那也是徒劳,因为百度会将此作废!总之,“百度广告点击机器人”是诞生了,但是,我们不可能用“百度广告自动点击工具”来给恶意竞争队友的广告推广计划造成致命打击,顶多也就是当着小偷小摸来用,并且每次不能偷得太多,一多就被百度发现而前功尽弃了。
通过对“百度广告点击机器人”的研制和测试后,我们公司反而对百度后台产生了充分信任,不再担心在百度上投放广告会招致大量恶意点击,而是可以放心大胆地在百度上做广告推广。现在,我们的“百度广告点击机器人”基本上算是被束之高阁了,但是,我们的努力和辛苦不能白费,在研究和编写“百度广告点击机器人”程序的过程中,非常有挑战和趣味性,其中涉及了大量的技术细节和技巧,我想把这些技术细节和技巧都向大家讲解出来,不知道大家有多少人对此感兴趣,也不知道这种做法是否违法?
下面罗列出“百度广告点击机器人”程序的实现原理和技术细节:
(1)使用HttpClient开源工具包访问某个关键字在百度上的搜索URL,例如,http://www.baidu.com/s?wd=%B4%AB%D6%C7%B2%A5%BF%CD。
(2)使用HttpParser开源工具包分析百度对某个关键字返回的搜索结果页面,从中分别提取出左侧和中间的广告链接。
(3)使用HttpClient开源工具包访问提取出的广告链接,并将访问到的各个链接的结果内容保存为html文件,以便确认确实得到了广告链接的网页。这里要共享第(1)步的Cookie信息和第一步的url地址作为referer,才能被百度认为是同一个浏览器的访问。
(4)重复1、2、3步骤,而不能直接重复访问第3步的地址,因为百度每次都在改变某个关键字的广告链接的url地址,也就是说某个广告链接的地址是一次性的,访问过后就必须重新搜索关键字和在新结果页面中获取新的广告链接地址。
(5)上面的程序写完了,运行效果从表面上看来非常完美,但是,百度是否真的为这种模拟点击访问进行了计费呢?我们在百度上为itcast网站购买一些偏门的关键字广告,可以肯定这些偏门的关键字几乎没有人点击,然后运行我们的“百度广告点击机器人”,让其点击几次我们的广告链接,过两个小时后去看百度后台是否进行了计费。结果发现我们虽然从搜索结果页面中得到了广告链接地址,也访问到了广告链接地址对应的广告页面,但百度并没有为此计费,看样子,我们把百度想得太简单了哦!
http://www.baidu.com/baidu.php?url=xxxxxxxxxx" ,而浏览器实际发出去的请求路径为“http://www.baidu.com/baidu.php?url=xxxxxxxxx&ck=645.0.125.295.105.383.115.2563”,多了一个ck的参数!这个ck参数是怎么附加上去的呢?
(7)这一定是我们在浏览器中点击广告链接地址时,触发了javascript函数,javascript函数修改了超链接地址而附加上去的!我们自己的“百度广告自动点击工具”程序在访问广告链接地址时,也必须附加上ck=645.0.125.295.105.383.115.2563这个参数,才能模拟出用户点击超链接的效果。ck参数后面的值并不是固定的,而是通过某种算法计算出来的,我们也必须用java程序写出这么一个算法的工具方法吗?还是先去看看这个javascript函数是怎么写的吧!查看百度搜索结果页面中的javascript源码,全部排在一行,太难读了,看来百度成心不想让我们读懂啊!没关系,把这些代码拷贝到myeclipse下的js文件中,使用ctl+shift+f进行格式化处理,代码排得整整齐齐了,这种使用工具软件的雕虫小技在关键时刻也能帮上大忙啊!
(8)大概读懂了其中所有javascript函数的作用和主要代码,对函数内部的细节算法则暂时忽略不计,读人家的代码,一定要分清楚那些是必须了解的,哪些是可以忽略不计的。是将这些javascript函数移植成对应的java代码,还是用java代码来直接调用这些现有的javascript函数呢?后者显然要方便和容易得多。java代码能够调用javascript代码吗?模模糊糊记得java6好像提供了这么一个新功能,赶紧在网上搜索和确认一下,果然可以,打开java6的帮助文档,现学现用java如何调用javascript。然后对百度搜索结果网页中的javascript代码略作修改,改变成适合java代码调用,主要是原来的javascript中使用了一些变量来记录鼠标按下,鼠标弹起,鼠标点击的坐标和时间,对这些变量设置一些差不多的模拟值即可。
(9)再次运行修改后的“百度广告点击机器人”,让其点击几次我们的广告链接,过两个小时后去看百度后台是否进行了计费。结果发现我们的程序确实修改了广告链接地址,也访问到了广告链接地址对应的广告页面,但百度还是没有为此计费,郁闷啊!想放弃,毕竟忙乎了好几天,就这样无果而终吗?不甘心啊,鼓足勇气,继续研究和实验下去,对自己说加油,就当着玩吧!
(11) 使用“百度广告点击机器人”完成几次点击,这仅仅只能说明程序逻辑是通过了,但并不能确认其是否具有实用价值和对竞争对手是否有震慑力,必须让“百度广告点击机器人”程序在一小时内完成至少50次左右的点击量,才能给竞争对手的广告推广计划造成重创。为了确认这一计划是否可行,首先必须拿自己做试验,豁出去几百元的广告费,让“百度广告点击机器人”程序以每秒50的强度进行点击,看几个小时候到底能消耗我们多少广告费用。结果几个小时忙乎下来,百度后台也就扣除了我们十几次的点击费用。看来即使我们的“百度广告点击机器人”每一次发出的请求对百度来说都是有效率,但是这样的请求太有规律或太频繁了,百度后台会在计费统计时将它们作废!
(12)程序逻辑都写完了,但不能带来很大的实用价值,怎能甘心?再抱着侥幸的心理作点最后的努力吧!首先改造“百度广告点击机器人”程序的固定点击频率,让“百度广告点击机器人”程序每次重新拨号和更改IP地址后,只发出一次模拟搜索和点击访问,暂停一个随机的时间段以后,再重新拨号和更改IP地址后,再发出下一次的模拟搜索和点击访问,并且如果一个关键字上有多个推广链接,要让上一次点击的广告链接和下一次点击的广告链接不是同一个链接,而是在多个广告链接之间依次轮循。当这样的过程重复3到7次后,3到7次也是随机计算出来的,再暂停一个很长的随机时间,这样就让“百度广告点击机器人”程序的每次模拟搜索和点击完全没有什么规律可循了。另外,程序也不能一直只访问某个关键字的广告链接,而是要在几个关键字的搜索页面上的广告链接之间进行交替访问,例如,先访问“传智播客”关键字的所有广告链接中的第一个链接,再访问“java培训”关键字的所有广告链接中的第一个链接,再回来访问“传智播客”关键字的所有广告链接中的第二个链接,再访问“java培训”关键字的所有广告链接中的第二个链接,依此递推......,采用互斥的多线程技术可以很好解决这个问题。
(13)程序在反复运行过程中会出现各种异常问题,特别是程序出了死锁之类的问题,非常难以找出bug所在。为了方便跟踪错误和排查问题,使用Log4j开源工具包进行日志记录。
最后的声明:
本文章及随后发布的源码和视频讲解课程仅用于技术研究与交流,希望广大学习者不要将其用于商业目的,尤其不得用于打击竞争对手和消耗竞争对手的广告经费,否则,由此引发的法律纠纷,本人概不负责!
另外,本文和随后的视频课程的最终目的是向大家教授网络编程技术和分析解决问题的技巧,只要百度调整一下广告算法,我们教授的程序就不再起作用了。但是,只要你按照本文介绍的技巧手法和思路步骤进行研究,就一定能写出对应的“百度广告点击机器人”程序。这好比你学会编写了针对某种病毒的杀毒程序,这个程序对新病毒不会起作用,但只要你研究新病毒后,再按照原来写杀毒程序的方式就一定能写出针对新病毒的杀毒程序。
http://blog.csdn.net/zhangxiaoxiang/archive/2010/03/30/5432280.aspx
下一篇: php辨别安卓 ios
推荐阅读