zoukankan      html  css  js  c++  java
  • 『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 = '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号更新====================

        在知乎上请教后已经解决转义问题,之前的逻辑没有理清导致出错,和编码并没有神马关系(晚上敲代码很容易出错哈 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

        现在已经可以查出二级域名对应的IP地址以及地理位置信息

        感觉http://dns.aizhan.com 的调用比较麻烦,接口已经换成 http://www.ip138.com

     

    文中图片引自:http://developer.51cto.com/art/201403/431104.htm(原博客链接失效)

        

  • 相关阅读:
    如何组建开发团队-建立畅通的沟通渠道
    如何组建开发团队-激励团队气势
    文件夹名与类名一致造成的命名空间无法识别的问题
    SQL Server 还原错误“restore database正在异常终止 错误 3154”
    S​Q​L​ ​S​e​r​v​e​r​ ​服务无法启动,错误1069解决办法
    无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案
    图解Microsoft SQL Server——“远程过程调用失败 [0x800706be] 错误“。
    Eclipse: Android Device Chooser
    部署网站时的错误“one of its dependencies.试图加载格式不正确的程序。”解决方案。
    把char赋值到string里面
  • 原文地址:https://www.cnblogs.com/anka9080/p/getsubdomain.html
Copyright © 2011-2022 走看看