批量判斷url或域名是否可以訪問

批量獲取域名的工具subDomainsBrute好用,但是獲取到的域名太多,不清楚每個域名是否都可以正常訪問,所以使用python寫了一個工具,來判斷http或https頁面是否可以訪問,以及訪問的標題內容。

代碼如下,歡迎交流,需要自取。

"""
======================
@Auther:CacheYu
@Time:2019/10/24 下午
======================
"""
#!usr/bin/python
#coding:utf-8

from bs4 import BeautifulSoup
import urllib.request
import requests
import time
import io
import sys

#python3
# 判斷是否能訪問;獲取標題;進行報錯處理
def exception(url):
	try:
		r = requests.get(url=url)
		time.sleep(0.01)
		if(r.status_code == 200):
			#判斷獲取的r的編碼方式,如果是utf-8的話,則再進行utf-8編碼(由於網頁的原因,部分utf-8需要再次編碼,否則,會出現亂碼)
			if(r.apparent_encoding=='utf-8'):
				r.encoding = 'utf-8'
			soup = BeautifulSoup(r.text, 'lxml')
			title = soup.title.text.replace(' ','').replace('\t','').replace('\n','').replace('\r','')
			print(url+'\t'+title)
		else:	
			time.sleep(2)
			print(url+'\t訪問頁面出錯')	
	except requests.exceptions.ConnectionError:	
		time.sleep(2)
		print(url+'\t未知的服務器')
	except requests.exceptions.ConnectTimeout:
		time.sleep(2)
		print(url+'\t連接、讀取超時')

# 獲取每行url
def urls(lines):
	for line in lines:
		# 判斷是否爲空行
		if (line =='\n'):
			pass
		else:
			line = line.replace(' ','').replace('\t','').replace('\n','')
			if(line[0:4] == 'http'):
				exception(line)
			else:			
				url_h = 'http://'+line
				exception(url_h)
				url_hs = 'https://'+line
				exception(url_hs)



if __name__ =='__main__':
        #test.txt是存放url或host的文件
	file = open('test.txt')
	lines = file.readlines()
	print('開始檢查:\nurl\t標題')
	urls(lines)
	file.close()

寫的過程中,由於不熟悉,兩個地方思考了很久。
一個是獲取url的內容,是使用urllib.request還是使用request。已轉發文章。
一個是由於獲取了不同網站的內容,當提取標題的時候,涉及到如何統一編碼。python3目前基本上解決了大部分編碼問題,由於本次的編碼有點特殊,同樣的utf-8編碼,一個頁面可以正常轉換,一個卻變成亂碼,如果均將編碼轉成utf-8,則其他編碼格式,例如GB2312編碼的網站則亂碼顯示。

python2和python3的一些不同
1) python2中默認使用ascii,python3中默認使用utf-8
2) Python2中,str就是編碼後的結果bytes,str=bytes,所以s只能decode。
3) python3中的字符串與python2中的u'字符串',都是unicode,只能encode,所以無論如何打印都不會亂碼,因爲可以理解爲從內存打印到內存,即內存->內存,unicode->unicode
4) python3中,str是unicode,當程序執行時,無需加u,str也會被以unicode形式保存新的內存空間中,str可以直接encode成任意編碼格式,s.encode('utf-8'),s.encode('gbk')

部分代碼參考地址:https://www.cnblogs.com/DicksonJYL/p/9464316.html

編碼圖片來源:https://www.cnblogs.com/schut/p/8406897.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章