『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: ...
随机推荐
- Struts2学习笔记(三):result配置的各项视图转发类型
Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...
- 深入理解java垃圾回收算法
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...
- 全文检索luncence
检索技术基本原理: 最主要的两点是 1.如何创建索引 2.如何查询. 分析需求: 好几篇文档,从这些文档找关键词,一种方式是顺序一个个遍历,加入这些文档量很多,就花费太长时间了,第二种是建立索引, ...
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...
- ACCSESS数据库导入到SQL SEVERES2005
首先打开Access数据库然后选择一张表,右击选择要导入数据库的类型(此处已sql2005为例) 然后选择新建 点击下一步 选择导入数据库类型(sql) 输入一个名称,在前面能用到(此处建的是250) ...
- 创建dblink遇到一系列问题
创建dblink遇到一系列问题,有时间 把问题整理一下
- ORACLE调度之基于事件的调度(二)【weber出品】
一.回顾 调度分基于时间的调度和基于事件的调度. 稍微复习一下前面的只是请浏览:<ORACLE调度之基于时间的调度(一)[weber出品]> 二.知识补充 1.队列:一种数据结构,就像一根 ...
- iOS之多线程开发NSThread、NSOperation、GCD
原文出处: 容芳志的博客 欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Centr ...
- 第10章 PHP异常处理
1. 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行. 既然抛出异常会中断程序执行,那么 ...
- 如何修改UITableView每个cell的分隔线和左边的距离?
在ios7中,UITableViewCell左侧会有默认15像素的空白.这时候,设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉.但是在ios8中,设置setSe ...