前面我们玩了一个Python加密的黑科技(还在担心酒店信息泄露,我用Python写了段加密算法,看你怎么破),今天我们来玩一个更有意思的小案例!大家都知道注册域名,尤其是牛逼的域名抢先注册可以赚钱,尤其是位数比较小的,3位,4位,5位的域名!既然我们玩Python,不如动手写一段代码来分析百万个域名,看看有没有捡漏的机会!
为了简单示例,我们用纯4位数的字母来演示一下我们的程序思想!大家可以扩展到6位字母,或者6-8字母和数字组合的域名等等!
01.产生随机4位字母组合
域名大部分都是字母开头的,我们这里先从26个字母里面随机挑4个字母,然后进行全排列!这个对Python来说,so easy,2-3行代码搞定!
1).产生随机4个字母的全排列
用Python里面的itertools这个模块,Python里面有很多牛逼的模块itertools是比较酷的一个。利用itertools里面的permutations进行全排列。因为是域名我们需要加上前缀"www"和".com"。当然也可以扩展到".cn"
2).把组合字母存入文件
运行一个26个字母的全排列是非常消耗时间的,我们这里取4个字母,如果是取6个,8个会很慢!所以一定要珍惜每一次运行的结果,我们把结果存入文件,方便下一读取。
一个写文件,一个读文件,为了存方便,我们在每一个域名后面加了换行符' '。所以在读的时候,我们要去掉换行符。
我们看一下,
如果是4位字母的全排列大概是有35万多种组合。
如果是5位字母随机全排列域名大概是多少,一共有780万多种组合,大概耗时50秒。如果再加上1个字母或者数字,都是百万级别的数据,产生百万域名的地址大概2分钟不到!
02.遍列百万域名
这么多域名我们肯定不可能一一去访问,我们用最简单爬虫去访问一下它们的首页,如果长度大于0,证明这个网站是存在的。这么大规模的频繁访问,肯定是用Python里面的并发了。
Python里面的并发有很多种套路,这里我选择gevent,这是轻量级的协程访问,而且帮你封装好了,访问百万级别的量,还是很轻松的!
1).简单爬虫请求页面
用requests请求页面,或者首页的内容,然后看一下长度大于0即可,说明页面有数据!
2).异步并发
我们用gevent来做并发,非常简单,想搭积木一样填数据即可!
用gevent的spawn函数绑定一个需要多任务执行的函数地址和对应的传入的参数
接着我们用joinall等待前面执行的事件结束即可,会返回一个微协程的结果result
最后用result里面的get函数获取网页地址和对应的长度
3).启动百万域名查询
requests不能直接并发,需要用猴子补丁import gevent.monkey。而且为了防止一次并发太多,我们把每次请求的域名进行分段,一次请求20个域名!
看一下效果:
我设置了4个字母的随机排列,大概35万个域名,运行了3分钟,结果让我大吃一惊,竟然很多网站都没有被注册,当然也有可能是request请求的时候没有加header,或者判断status_code。(为了保证代码的正确性,我加了一个abcd123和淘宝的域名测试一下)
网友评论