『Python』爬行搜索引擎结果获得指定主机二级域名及IP信息

0x 00 前言
前天自己在玩的时候,自己通过百度搜索主机的二级域名感觉好麻烦,自已要一页页的去翻
而且人工识别是否是重复的二级域名也够蛋疼的,正好最近在学正则表达式,权当练手了
0x 00 代码
# coding=utf-8
# author:Anka9080
# environment:Eclipse
import urllib
import urllib2
import cookielib
import re #site = 'baidu.com'
print 'Please input the root site like "baidu.com":'
site = raw_input()
siteFormat1 = site
siteFormat1 = siteFormat1.replace('.', '\.')
#print siteFormat1 urlPage = 'http://www.haosou.com/s?src=360sou_newhome&q=site:'+site
req = urllib2.Request(urlPage)
res = urllib2.urlopen(req)
html = res.read().decode('utf-8')
# 获得搜索结果的页面数
pageStr = re.search(ur'找到相关结果约(.*?)个',html)
page = pageStr.group(1)
formatNum = ''
for c in page:
if not c in formatNum:
page = page.replace(c,'')
page = int(page) / 10
print 'Total Page: ' + str(page) if page > 6:
page = 6
newItems = []
for p in range(1, page):
urlDomain = 'http://www.haosou.com/s?src=360sou_newhome&q=site:'+site+'&pn='+str(p)
req = urllib2.Request(urlDomain)
res = urllib2.urlopen(req)
html = res.read().decode('utf-8')
tmp = 'linkinfo\"\>\<cite\>(.+?\.'+siteFormat1+')';
pattern = re.compile(tmp)
items = re.findall(pattern, html) # 去重操作
for item in items:
if item not in newItems:
newItems.append(item) print 'SubDomain Count: '+ str(len(newItems) - 1) for item in newItems: # 获得对应 IP 信息
pattern = re.compile(ur'\>\>\ (.*?)\<\/font[\s|\S]*?本站主数据:(.*?)\<\/li\>')
urlIP = 'http://www.ip138.com/ips138.asp?ip='+item
req = urllib2.Request(urlIP)
res = urllib2.urlopen(req)
html = res.read().decode('gb2312')
result = re.search(pattern,html)
print item + ' ' + result.group(1) + ' ' + result.group(2)
测试结果如下:
Please input the root site like "baidu.com":
baidu.com
Total Page: 2
SubDomain Count: 9
www.baidu.com 61.135.169.121 北京市 百度蜘蛛 联通
tieba.baidu.com 123.125.65.93 北京市 联通
fanyi.baidu.com 202.108.23.153 北京市 联通
wenku.baidu.com 123.125.70.102 北京市 百度蜘蛛 联通
map.baidu.com 112.80.248.48 江苏省南京市 联通
music.baidu.com 123.125.114.14 北京市 联通
zhidao.baidu.com 123.125.65.91 北京市 联通
baike.baidu.com 123.125.70.105 北京市 百度蜘蛛 联通
yun.baidu.com 123.125.65.51 北京市 联通
pan.baidu.com 202.108.23.29 北京市 联通
0x 02 总结
思路大概是这个样子:
先通过urllib2.Request() 和 urllib2.urlopen()访问url
再从返回结果中得到搜索结果页面数
为了提高效率 页面数 大于 5 会只爬行搜索结果的前5个页面
后面 又做了去重操作 然后就得到二级域名列表咯 : )
中间蛋疼的 地方倒是 Py 的 转义符号问题 身边能有个可以问问的大牛多好~
后期 准备使用 http://dns.aizhan.com/的查询结果 直接获得 IP以及旁站信息
==================6.13号更新====================
在知乎上请教后已经解决转义问题,之前的逻辑没有理清导致出错,和编码并没有神马关系(晚上敲代码很容易出错哈 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
现在已经可以查出二级域名对应的IP地址以及地理位置信息
感觉http://dns.aizhan.com 的调用比较麻烦,接口已经换成 http://www.ip138.com
文中图片引自:http://developer.51cto.com/art/201403/431104.htm(原博客链接失效)
『Python』爬行搜索引擎结果获得指定主机二级域名及IP信息的更多相关文章
- 『Python』__getattr__()特殊方法
self的认识 & __getattr__()特殊方法 将字典调用方式改为通过属性查询的一个小class, class Dict(dict): def __init__(self, **kw) ...
- 『Python』库安装
1.安装指定版本的tensorflow 虽然官网有4种安装方式,并且推荐用anaconda的方式,但是有时候我们需要指定版本的tensorflow,而pip可以做到. 比如我装的是anaconda3. ...
- 『Python』多进程处理
尝试学习python的多进程模组,对比多线程,大概的区别在: 1.多进程的处理速度更快 2.多进程的各个子进程之间交换数据很不方便 多进程调用方式 进程基本使用multicore() 进程池优化进程的 ...
- 『Python』源码解析_从ctype模块理解对象
1.对象的引用计数 从c代码分析可知,python所有对象的内存有着同样的起始结构:引用计数+类型信息,实际上这些信息在python本体重也是可以透过包来一窥一二的, from ctypes impo ...
- 『Python』进程同步
1. Lock(互斥锁) 是可用的最低级的同步指令.Lock处于锁定状态时,不被其他的线程拥有. from multiprocessing import Process, Value, Lock de ...
- 『Python』多进程
Python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在Python中大部分情况需要使用多进程.Python提供了multiprocessin ...
- 『Python』面向对象(二)
继承 继承的语法 class Animal(object): def __init__(self,name): self.__name = name class Dog(Animal): kind = ...
- 『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息
每个漏洞条目包含: 乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值 主要是做数据分析使用:可以分析某厂商的各类型漏洞的统计:或者对白帽子的能力进行分析..... 数据更新 ...
- 『Python』 ThreadPool 线程池模板
Python 的 简单多线程实现 用 dummy 模块 一句话就可以搞定,但需要对线程,队列做进一步的操作,最好自己写个线程池类来实现. Code: # coding:utf-8 # version: ...
随机推荐
- 谈谈C#中的接口
接口的相关陈述 1.一个接口定义了一个契约. 2.接口可以包容方法.C#属性.事件.以及索引器. 3.在一个接口声明中,我们可以声明零个或者多个成员. 4.所有接口成员的默认访问类型都是public. ...
- Hadoop与HBase中遇到的问题
1. Hadoop中遇到的问题 曾经所遇到的问题因为没有记录,所以忘了 (1)NameNode没有启动成功, 是因为你对HDFS多次格式化,导致datanode中与namenode中的VERSION文 ...
- 使用Tcl脚本分配FPGA管脚
自己主动生成Tcl文件 Project -> Generate Tcl File for Project... 弹出例如以下对话框.设置脚本路径. 编辑引脚 使用set_location_ass ...
- opengl 函数
( 7 )光栅化.象素操作函数. 像素位置 glRasterPos*() .线型宽度 glLineWidth() .多边形绘制模式 glPolygonMode() ,读取象素 glReadPixel( ...
- Python下载漫画
上午起来提不起劲,于是就用电脑看漫画,但是在线看漫画好烦,就想下下来看.一个一个点太麻烦,于是花了点时间用python写了个demo,把爱漫画的漫画下载下来,这样就可以随时随地看了.这也是我首次尝试用 ...
- vsftp配置主动模式和被动模式
配置文件:/etc/vsftpd/vsftpd.conf 主动模式配置方法: 主动式连接使用的数据通道 connect_from_port_20=YES 支持数据流的被动式连接模式 pasv_enab ...
- Dij的堆优化
#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #i ...
- gridview动态添加列的问题
相信大家也和我一样遇到过这种问题,gridview在生成列的时候当列不确定怎么办?下面分享一下自己的解决方法. 举个列子说明一下. 普通列的添加比较简单. BoundField bf = new Bo ...
- ASP.NET-FineUI开发实践-16(二)
实现那还差点,在事件参数里我传了一个boolall选中状态参数,这个参数由前台给的,RowSelect 传的是index 行号,就是改这,通过$符号来分开的, if (commandArgs.Leng ...
- HTML5 FileAPI读取实例---(一)
在HTML5中,提供了一个关于文件操作的API,通过这个API,对于从web页面上访问本地文件系统的相关处理变得十分简单.到目前为止只有部分浏览器对它提供支持. 1.FileList对象和File对象 ...