在对子域名进行收集的时候,我们可能会得到如下所示的域名:
1
| https://www.baidu.com/s?wd=%E5%B0%8F%E6%80%AA
|
当然你可以通过进行正则匹配的方法进行匹配,来回去www.baidu.com这个域名
也可以通过tldextract模块来进行匹配,个人认为第二种更简单
介绍使用
tldextract准确地从URL的域名和子域名分离通用顶级域名或国家顶级域名。 例如,http://www.google.com,你只想取出连接的 ‘google’ 部分。 每个人都会想到用 ‘.’ 拆分,来获取域名和后缀,但这是不准确的。并且只有当你想到简单的,例如.com域名,以 ‘.’ 截取最后2个元素得到结果。 想想如果解析,例如:http://forums.bbc.co.uk,上面天真的分裂方法是有问题的,你会得到 ‘co’ 作为域名和“uk”为顶级域名,而不是“bbc”和“co.uk” 。tldextract有一个公共后缀列表 ,它可以匹配所有域名。 因此,给定一个URL,它从其域中知道其子域名,并且从其国家中知道其域名。
1 2 3 4 5 6 7
| import tldextract
vol = tldextract.extract('https://www.baidu.com/s?wd=%E5%B0%8F%E6%80%AA') print(vol)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| import requests from lxml import etree import tldextract
page = -2 site=str(input('请输入域名:示例(baidu.com):')) data1 = []
def bing_sera(): global page global data1 headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0', 'Accept': '*/*', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip,deflate', 'referer': "http://cn.bing.com/" } while True: if page<=108: url='https://cn.bing.com/search?q=email+site%3{}&first={}&FORM=PORE'.format(site,page) page_text = requests.get(url=url,headers=headers).text tree = etree.HTML(page_text) html_data=tree.xpath('//div[@id="b_content"]/main/ol/li/h2/a/@href') data1.extend(html_data) page += 10 else: data2=[] for data in data1: vol = tldextract.extract(data) data2.append(vol.fqdn) print(list(set(data2))) break bing_sera()
|