溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Python編寫信息進行收集子域名腳本

發布時間:2021-10-26 17:31:07 來源:億速云 閱讀:209 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關如何用Python編寫信息進行收集子域名腳本,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

0×00 前言

任務:

使用腳本借助搜索引擎搜集網站子域名信息。

準備工具:

python安裝包、pip、http請求庫:requests庫、正則庫:re庫。

子域名是相對于網站的主域名的。比如百度的主域名為:baidu.com,這是一個***域名,而在***域名前由"."隔開加上不同的字符,比如zhidao.baidu.com,那么這就是一個二級域名,同理,繼續擴展主域名的主機名,如club.user.baidu.com,這就是一個三級域名,依次類推。

0X00 正文

手動收集子域名是怎樣的一種過程?

舉個例子,比如我們要收集qq.com這個主域名,在百度搜索引擎能夠搜索到的所有子域名。

首先,使用搜索域名的語法搜索~

搜索域名語法:site:qq.com

然后,在搜索結果中存在我們要的子域名信息,我們可以右鍵,查看元素,復制出來。

如何用Python編寫信息進行收集子域名腳本

如何用python替代手工的繁瑣操作?

其實就是將手工收集用代碼來實現自動化,手工收集的步驟:

如何用Python編寫信息進行收集子域名腳本

收集器制作開始:

1.發起一個搜索的http請求

請求我們使用python的第三方http庫,requests

需要額外安裝,可以使用pip進行安裝pipinstallrequests

requests基本使用-example:

help(requests)查看requests的幫助手冊。

dir(requests)查看requests這個對象的所有屬性和方法。

requests.get('http://www.baidu.com&#39

發起一個GET請求。

好了,補充基礎知識,我們來發起一個請求,并獲得返回包的內容。

#-*-coding:utf-8-*-  import requests     #導入requests庫  url='http://www.baidu.com/s?wd=site:qq.com' #設定url請求  response=requests.get(url).content  #get請求,content是獲得返回包正文  print response

返回包的內容實在太多,我們需要找到我們想要的子域名,然后復制出來。

從查看元素我們可以發現,子域名被一段代碼包裹著,如下:

style="text-decoration:none;">chuangshi.qq.com/ </a>

2.正則表達式——(.*?) 閃亮登場:

正則 規則:style=”text-decoration:none;”>(.*?)/

正則表達式難嗎?難。復雜嗎?挺復雜的。

然而最簡單的正則表達式,我們把想要的數據用(.*?)來表示即可。

re 基本使用-example:

假設我們要從一串字符串'123xxIxx123xxLikexx123xxStudyxx'取出ILike Study,我們可以這么寫:

eg='123xxIxx123xxLikexx123xxStudyxx'  printre.findall('xx(.*?)xx',eg)  #打印結果  ['I','Like','Study']

基于上述例子,依葫蘆畫瓢也可以獲取子域名了。

#-*-coding:utf-8-*-  importrequests#導入requests庫  importre#導入re庫  url='http://www.baidu.com/s?wd=site:qq.com'#設定url請求  response=requests.get(url).content#get請求,content是獲得返回包正文  #重點,重點,下面這段代碼~  subdomain=re.findall('style="text-decoration:none;">(.*?)/',response)  printsubdomain

結果:

['www.qq.com','chuangshi.qq.com','1314.qq.com','lol.qq.com','tgp.qq.com','open.qq.com','https:','ac.qq.com']

3.翻頁的處理

上面獲得的子域名,僅僅只是返回結果的***頁內容,如何獲取所有頁面的結果?

key=qq.com  #為url添加頁碼:  url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=0"  url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=10"  url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=20"  #pn=0為***頁,pn=10為第2頁,pn=20為第3頁…

天啊,100頁我要寫100個url嗎?當然不是,循環語句解決你的困擾。

foriinrange(100):#假設有100頁  i=i*10  url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=%s"%i

4.重復項太多?想去重?

基礎知識:

python的數據類型:set

set持有一系列的元素,但是set的元素沒有重復項,且是無序的。

創建set的方式是調用set()并傳入一個list,list的元素將作為set的元素。

sites=list(set(sites))#用set實現去重

正則表達式匹配得到的是一個列表list,我們調用set()方法即可實現去重。

5.完整代碼&&總結

下面是百度搜索引擎爬取子域名的完整代碼。

#-*-coding:utf-8-*-  importrequests  importre  key="qq.com"  sites=[]  match='style="text-decoration:none;">(.*?)/'  foriinrange(48):  i=i*10  url="http://www.baidu.com.cn/s?wd=site:"+key+"&cl=3&pn=%s"%i  response=requests.get(url).content  subdomains=re.findall(match,response)  sites+=list(subdomains)  site=list(set(sites))#set()實現去重  printsite  print"Thenumberofsitesis%d"%len(site)  foriinsite:  printi

結果截圖:

如何用Python編寫信息進行收集子域名腳本

0X02 總結

其實子域名挖掘就是一個小小的爬蟲,只不過我們是用百度的引擎來爬取,不過呢,用bing引擎爬去的數據量會比百度更多,所以建議大家使用bing的引擎,代碼的編寫方法和百度的大同小異就不放代碼了,給個小tip,bing搜索域名用的是domain:qq.com這個的語法哦。

關于如何用Python編寫信息進行收集子域名腳本就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女