如何用Python编写信息收集之子域名收集脚本

2017 年 12 月 6 日 黑白之道


0×00 前言


任务:


使用脚本借助搜索引擎搜集网站子域名信息。


准备工具:


python安装包、pip、http请求库:requests库、正则库:re库。


子域名是相对于网站的主域名的。比如百度的主域名为:baidu.com,这是一个顶级域名,而在顶级域名前由"."隔开加上不同的字符,比如zhidao.baidu.com,那么这就是一个二级域名,同理,继续扩展主域名的主机名,如club.user.baidu.com,这就是一个三级域名,依次类推。


0X00 正文


手动收集子域名是怎样的一种过程?


举个例子,比如我们要收集qq.com这个主域名,在百度搜索引擎能够搜索到的所有子域名。


首先,使用搜索域名的语法搜索~


搜索域名语法:site:qq.com


然后,在搜索结果中存在我们要的子域名信息,我们可以右键,查看元素,复制出来。



如何用python替代手工的繁琐操作?


其实就是将手工收集用代码来实现自动化,手工收集的步骤:



收集器制作开始:


1.发起一个搜索的http请求


请求我们使用python的第三方http库,requests


需要额外安装,可以使用pip进行安装pipinstallrequests


requests基本使用-example:


help(requests)查看requests的帮助手册。


dir(requests)查看requests这个对象的所有属性和方法。


requests.get('http://www.baidu.com&#39 发起一个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'取出ILike Study,我们可以这么写:


eg='123xxIxx123xxLikexx123xxStudyxx'

printre.findall('xx(.*?)xx',eg)

#打印结果

['I','Like','Study']


基于上述例子,依葫芦画瓢也可以获取子域名了。


#-*-coding:utf-8-*-

importrequests#导入requests库

importre#导入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)

printsubdomain

结果:

['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吗?当然不是,循环语句解决你的困扰。


foriinrange(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-*-

importrequests

importre

key="qq.com"

sites=[]

match='style="text-decoration:none;">(.*?)/'

foriinrange(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()实现去重

printsite

print"Thenumberofsitesis%d"%len(site)

foriinsite:

printi


结果截图:



0X02 总结


其实子域名挖掘就是一个小小的爬虫,只不过我们是用百度的引擎来爬取,不过呢,用bing引擎爬去的数据量会比百度更多,所以建议大家使用bing的引擎,代码的编写方法和百度的大同小异就不放代码了,给个小tip,bing搜索域名用的是domain:qq.com这个的语法哦。


文章出处:FreeBuf

你会喜欢


网卡厂商自动识别工具(Python版, 附源代码)

多功能Python键盘记录工具:Radium

Python编写的开源Struts2全版本漏洞检测工具


登录查看更多
1

相关内容

【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
197+阅读 · 2020年6月29日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
164+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
120+阅读 · 2020年5月10日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
65+阅读 · 2020年3月26日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
用Python调用百度OCR接口实例
数据挖掘入门与实战
16+阅读 · 2018年1月29日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
设计和实现一款轻量级的爬虫框架
架构文摘
13+阅读 · 2018年1月17日
使用 Python 绘制《星战》词云
Datartisan数据工匠
3+阅读 · 2017年8月31日
如何用Python做舆情时间序列可视化?
CocoaChina
11+阅读 · 2017年7月21日
Video-to-Video Synthesis
Arxiv
9+阅读 · 2018年8月20日
Arxiv
3+阅读 · 2018年4月5日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
197+阅读 · 2020年6月29日
一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
164+阅读 · 2020年5月14日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
120+阅读 · 2020年5月10日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
65+阅读 · 2020年3月26日
相关资讯
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
用Python调用百度OCR接口实例
数据挖掘入门与实战
16+阅读 · 2018年1月29日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
设计和实现一款轻量级的爬虫框架
架构文摘
13+阅读 · 2018年1月17日
使用 Python 绘制《星战》词云
Datartisan数据工匠
3+阅读 · 2017年8月31日
如何用Python做舆情时间序列可视化?
CocoaChina
11+阅读 · 2017年7月21日
Top
微信扫码咨询专知VIP会员