设为首页 收藏本站
查看: 627|回复: 0

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

[复制链接]
发表于 2015-11-29 10:32:15 | 显示全部楼层 |阅读模式
DSC0000.png
  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 = '0123456789'
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号更新====================
      在知乎上请教后已经解决转义问题,之前的逻辑没有理清导致出错,和编码并没有神马关系(晚上敲代码很容易出错哈 &frasl;(&frasl; &frasl;·&frasl;&omega;&frasl;·&frasl; &frasl;)&frasl;
      现在已经可以查出二级域名对应的IP地址以及地理位置信息
      感觉http://dns.aizhan.com 的调用比较麻烦,接口已经换成 http://www.ip138.com
  
  文中图片引自:http://developer.iyunv.com/art/201403/431104.htm(原博客链接失效)
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144838-1-1.html 上篇帖子: Python Socket,How to Create Socket Cilent? 下篇帖子: Python上下文管理器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表