批量判断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

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