『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(原博客鏈接失效)

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM