手把手教你制作信息收集器之子域名收集
2018-06-17 23:33:37来源:未知 阅读 ()
本期任务:使用脚本借助搜索引擎搜集网站子域名信息。
准备工具:python安装包、pip、http请求库:requests库、正则库:re库。
问题引入:
1. 何为子域名?
答:子域名是相对于网站的主域名的。比如百度的主域名为:baidu.com
,这是一个顶级域名,而在顶级域名前由"."
隔开加上不同的字符,比如zhidao.baidu.com
,那么这就是一个二级域名,同理,继续扩展主域名的主机名,如club.user.baidu.com
,这就是一个三级域名,依次类推。
2. 手动收集子域名是怎样的一种过程?
举个例子,比如我们要收集qq.com这个主域名,在百度搜索引擎能够搜索到的所有子域名。
首先,使用搜索域名的语法 搜索~
搜索域名语法:site:qq.com
然后,在搜索结果中存在我们要的子域名信息,我们可以右键,查看元素,复制出来~
3. 如何用python替代手工的繁琐操作?
其实就是将手工收集用代码来实现自动化,手工收集的步骤:
收集器制作开始:
1. 发起一个搜索的http请求
请求我们使用python的第三方http库,requests
需要额外安装,可以使用pip进行安装pip install requests
requests 基本使用-example:
help(requests)
查看requests的帮助手册
dir(requests)
查看requests这个对象的所有属性和方法
requests.get('http://www.baidu.com')
发起一个GET请求
好了,补充基础知识,我们来发起一个请求,并获得返回包的内容
#-*-coding:utf-8-*- import requests #导入requests库 url='http://www.baidu.com/s?wd=site:qq.com' #设定url请求 response=requests.get(url).content #get请求,content是获得返回包正文 print response
但是呢,返回包的内容还是实在太多,我们需要找到我们想要的子域名,然后复制出来。
从查看元素我们可以发现,子域名被一段代码包裹着,如下:
style="text-decoration:none;">chuangshi.qq.com/ </a>
2. 正则表达式——(.*?)
闪亮登场:
正则 规则:style=”text-decoration:none;”>
(.*?)
/
正则表达式难吗?难。复杂吗?挺复杂的。
然而最简单的正则表达式,我们把想要的数据用(.*?)
来表示即可。
re 基本使用-example:
假设我们要从一串字符串'123xxIxx123xxLikexx123xxStudyxx'
取出I Like Study
,我们可以这么写:
eg='123xxIxx123xxLikexx123xxStudyxx' print re.findall('xx(.*?)xx',eg) #打印结果 ['I', 'Like', 'Study']
基于上述例子,依葫芦画瓢也可以获取子域名了~
#-*-coding:utf-8-*- import requests #导入requests库 import re #导入re库 url='http://www.baidu.com/s?wd=site:qq.com' #设定url请求 response=requests.get(url).content #get请求,content是获得返回包正文 #重点,重点,下面这段代码~ subdomain=re.findall('style="text-decoration:none;">(.*?)/',response) print subdomain 结果: ['www.qq.com', 'chuangshi.qq.com', '1314.qq.com', 'lol.qq.com', 'tgp.qq.com', 'open.qq.com', 'https:', 'ac.qq.com']
3. 翻页的处理
上面获得的子域名,仅仅只是返回结果的第一页内容,如何获取所有页面的结果?
key=qq.com #为url添加页码: url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=0" url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=10" url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=20" ...... #pn=0为第一页,pn=10为第2页,pn=20为第3页...
天啊,100页我要写100个url吗?当然不是,循环语句解决你的困扰~
for i in range(100): #假设有100页 i=i*10 url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=%s"%i
4. 重复项太多?想去重?
基础知识:
python的数据类型: set
set持有一系列的元素,但是set的元素没有重复项,且是无序的。
创建set的方式是调用set()并传入一个list,list的元素将作为set的元素。
sites=list(set(sites)) #用set实现去重
正则表达式匹配得到的是一个列表list,我们调用set()方法即可实现去重。
5. 完整代码&&总结
下面是百度搜索引擎爬取子域名的完整代码~
#-*-coding:utf-8-*- """ @author: reborn """ import requests import re key="qq.com" sites=[] match='style="text-decoration:none;">(.*?)/' for i in range(48): i=i*10 url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=%s"%i response=requests.get(url).content subdomains=re.findall(match,response) sites += list(subdomains) site=list(set(sites)) #set()实现去重 print site print "The number of site is %d"%len(site) for i in site: print i
结果截图:
小小心得:其实子域名挖掘就是一个小小的爬虫,只不过我们是用百度的引擎来爬去,不过呢,用bing引擎爬去的数据量会比百度更多,所以建议大家使用bing的引擎,代码的编写方法和百度的大同小异就不放代码了,给个小tip,bing搜索域名用的是domain:qq.com
这个的语法哦,好了,本期的手把手教你制作信息收集器就介绍到这里,我们下期见,关于bing的脚本就请有需要的同学留言吧~
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 手把手教你破解文件密码、wifi密码、网页密码 2019-07-24
- 一篇文章教你使用Python自动赚取支付宝积分,网友:发家致富 2019-07-24
- 50行Python代码,教你获取公众号全部文章 2019-07-24
- 手把手教你实现"短信轰炸" 2019-07-24
- 如何用Python制作优美且功能强大的数据可视化图像 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash