批量获取学校域名子

python安全开发

python安全开发

  • python安全开发
  • 前言
  • 一、平台edu
  • 二、使用步骤
    • 1.引入库
    • 2.功能
    • **完整代码**
    • 完整代码
  • 总结


前言

目的:想快速的搜集edu的域名

一、平台edu

https://src.sjtu.edu.cn/rank/firm/0/?page=2

二、使用步骤

1.引入库

代码如下(示例):

Get_EduName.py

import requests //爬虫
from bs4 import BeautifulSoup //提取数据
from concurrent.futures import ThreadPoolExecutor, as_completed  //多进程
import csv //csv

2.功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAepcfID-1720229806355)(https://i-blog.csdnimg.cn/direct/af3a9e0b89ff41fdb77517e31a79dc12.png)]

def get_edu_name(page):
    url = f'https://src.sjtu.edu.cn/rank/firm/0/?page={page}'
    try:
        print(f'正在获取第{page}页的数据...')
        response = requests.get(url)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            edu1 = soup.find_all('td', attrs={'class': 'am-text-center'})
            edu_names = []
            for td in edu1: //找到td
                if td.a:  //找到a标签
                    institution_name = td.a.get_text()
                    edu_names.append(institution_name)
            return edu_names
        else:
            print(f'Failed to retrieve page {page}. Status code: {response.status_code}')
            return []
    except Exception as e:
        print(f'Failed to retrieve page {page}: {e}')
        return []

写入数据

def extract_unique_universities(filename):
    unique_universities = set()
    universities_list = []
    with open(filename, 'r', encoding='utf-8-sig') as f:
        reader = csv.reader(f)
        for row in reader:
            if row:  # 确保行不为空
                university_name = row[0].strip()  # 取第一列数据,并去除空格
                if university_name not in unique_universities:
                    unique_universities.add(university_name)
                    universities_list.append(university_name)
    return universities_list
if __name__ == '__main__':
    max_pages = 100  # 设置要获取的页面数
    edu_names = get_all_edu_names(max_pages)
    save_edu_names_to_csv(edu_names, 'edu.csv')
    print("学校名称已保存到 edu.csv 文件中。")
    filename = 'edu.csv'  # 替换为你的 CSV 文件路径
    universities = extract_unique_universities(filename)
    print("提取的大学数据:")
    for university in universities:
        print(university)
        with open('university.txt', 'a+', encoding='utf-8') as f:
            f.write(university + '\n')

完整代码

import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, as_completed
import csv

def get_edu_name(page):
    url = f'https://src.sjtu.edu.cn/rank/firm/0/?page={page}'
    try:
        print(f'正在获取第{page}页的数据...')
        response = requests.get(url)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            edu1 = soup.find_all('td', attrs={'class': 'am-text-center'})
            edu_names = []
            for td in edu1:
                if td.a:
                    institution_name = td.a.get_text()
                    edu_names.append(institution_name)
            return edu_names
        else:
            print(f'Failed to retrieve page {page}. Status code: {response.status_code}')
            return []
    except Exception as e:
        print(f'Failed to retrieve page {page}: {e}')
        return []

def get_all_edu_names(max_pages):
    all_edu_names = []
    with ThreadPoolExecutor() as executor:
        futures = [executor.submit(get_edu_name, page) for page in range(1, max_pages + 1)]
        for future in as_completed(futures):
            edu_names = future.result()
            all_edu_names.extend(edu_names)
    return all_edu_names

def save_edu_names_to_csv(edu_names, filename):
    with open(filename, 'w', newline='', encoding='utf-8-sig') as f:
        writer = csv.writer(f)
        for name in edu_names:
            writer.writerow([name])

def extract_unique_universities(filename):
    unique_universities = set()
    universities_list = []
    with open(filename, 'r', encoding='utf-8-sig') as f:
        reader = csv.reader(f)
        for row in reader:
            if row:  # 确保行不为空
                university_name = row[0].strip()  # 取第一列数据,并去除空格
                if university_name not in unique_universities:
                    unique_universities.add(university_name)
                    universities_list.append(university_name)
    return universities_list
if __name__ == '__main__':
    max_pages = 100  # 设置要获取的页面数
    edu_names = get_all_edu_names(max_pages)
    save_edu_names_to_csv(edu_names, 'edu.csv')
    print("学校名称已保存到 edu.csv 文件中。")
    filename = 'edu.csv'  # 替换为你的 CSV 文件路径
    universities = extract_unique_universities(filename)
    print("提取的大学数据:")
    for university in universities:
        print(university)
        with open('university.txt', 'a+', encoding='utf-8') as f:
            f.write(university + '\n')

Get_Edu_domain.py
原理从bing里面搜索关键字,提取网址,写入csv

完整代码

import requests
from bs4 import BeautifulSoup
import csv
import tldextract
import concurrent.futuresGet_Edu_domain.py

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0',
    'cookie': 'MUID=32957CB67A1A615722B972087B656099'
}

university_list = []


with open('university.txt', 'r', encoding='utf-8') as f:
    for line in f:
        university_list.append(line.strip().replace(' ', '+'))


with open('university_results.csv', 'w', newline='', encoding='utf-8-sig') as csvfile:
    csvwriter = csv.writer(csvfile)
    csvwriter.writerow(['大学', '网址', '子域名'])  

    def process_site(site):
        url = f'https://www.bing.com/search?q=intitle%3a{site}&mkt=zh-CN&FPIG=0B6AED8B37BF44B78B8F58E6A949DB10&first=1&FORM=PERE'

        print(f"正在搜索: {site}")

        try:
            response = requests.get(url, headers=headers)
            print(f"状态码: {response.status_code}")

            response.encoding = 'utf-8'
            soup = BeautifulSoup(response.text, 'lxml')
            results = soup.find_all('h2')

            found_valid_result = False

            for result in results:
                try:
                    u = result.a.get('href')
                    print(f"网址: {u}")

                    # 提取子域名
                    extracted = tldextract.extract(u)
                    if extracted.subdomain:
                        domain = f"{extracted.subdomain}.{extracted.domain}.{extracted.suffix}"
                        if '.edu.cn' in domain or domain.endswith('.edu.cn'):
                            csvwriter.writerow([site, u, domain]) 
                            found_valid_result = True
                            break  

                except Exception as e:
                    print(f"提取网址时出错: {e}")

            if not found_valid_result:
                print("未找到有效的搜索结果。")
                csvwriter.writerow([site, '未找到有效结果', ''])  

        except requests.RequestException as e:
            print(f"请求失败: {e}")
            csvwriter.writerow([site, f"请求失败: {e}", ''])  

        except Exception as e:
            print(f"出错: {e}")
            csvwriter.writerow([site, f"出错: {e}", '']) 

    
    with concurrent.futures.ThreadPoolExecutor() as executor:
        executor.map(process_site, university_list)

效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sm0MV4S6-1720229806356)(https://i-blog.csdnimg.cn/direct/9395a2cee2664aaf889ee715df20b8cc.png)]
可以使用这里的子域名写入到一个文件
可以使用subfinder,httpx,ksubdomain,

./subfinder -d baidu.com -silent|./ksubdomain -verify -silent|./httpx -title -content-length -status-code -o url.html -html

总结

可以批量打edu的域名,快速上分edu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/777166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

罗剑锋的C++实战笔记学习(一):const、智能指针、lambda表达式

1、const 1)、常量 const一般的用法就是修饰变量、引用、指针,修饰之后它们就变成了常量,需要注意的是const并未区分出编译期常量和运行期常量,并且const只保证了运行时不直接被修改 一般的情况,const放在左边&…

深度卷积神经网络 AlexNet

一、机器学习深度学习的发展 1、机器学习SVM方法 (1)20世纪90年代,基于统计学习理论的结果,开发了一种新型的学习算法——支持向量机(SVM)。这就产生了一类新的理论上优雅的学习机器,它们将SVM…

大厂面试官问我:MySQL宕机重启了,怎么知道哪些事务是需要回滚的哪些是需要提交的?【后端八股文九:Mysql事务八股文合集】

本文为【Mysql事务八股文合集】初版,后续还会进行优化更新,欢迎大家关注交流~ 大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行深挖,来考察你对这个项目亮点的理解以及…

2024/7/6 英语每日一段

More than half of late-teens are specifically calling for more youth work that offers “fun”, with older teenagers particularly hankering for more jollity, according to a study carried out by the National Youth Agency. One in 10 said they have zero option…

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

罗剑锋的C++实战笔记学习(二):容器、算法库、多线程

4、容器 1)、容器的通用特性 所有容器都具有的一个基本特性:它保存元素采用的是值(value)语义,也就是说,容器里存储的是元素的拷贝、副本,而不是引用 容器操作元素的很大一块成本就是值的拷贝…

重大更新来袭!!《植物大战僵尸杂交版V2.1+修改器+融合版》

大家好!每个软件更新总是令人兴奋不已。前段时间介绍的《植物大战僵尸》系列以其独特的策略玩法和丰富的植物角色,赢得了很多玩家的喜爱。而在今天,这款经典游戏全网最新版本——《植物大战僵尸:杂交版V2.1》正式推出,…

【Mindspore进阶】实战ResNet50图像分类

ResNet50图像分类 图像分类是最基础的计算机视觉应用,属于有监督学习类别,如给定一张图像(猫、狗、飞机、汽车等等),判断图像所属的类别。本章将介绍使用ResNet50网络对CIFAR-10数据集进行分类。 ResNet网络介绍 ResNet50网络是2015年由微…

vue require引入静态文件报错

如果是通过向后端发送请求,动态的获取对应的文件数据流很容易做到文件的显示和加载。现在研究,一些不存放在后端而直接存放在vue前端项目中的静态媒体文件如何加载。 通常情况下,vue项目的图片jpg,png等都可以直接在/ass…

量化机器人:金融市场的智能助手

引言 想象一下,在繁忙的金融市场中,有一位不知疲倦、冷静客观的“超级交易员”,它能够迅速分析海量数据,精准捕捉交易机会,并自动完成买卖操作。这位“超级交易员”不是人类,而是我们今天要聊的主角——量…

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路: Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug, 我也认同;网友认为可以更新模块, 我也认同, 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用,界面拖…

从CPU的视角看C++的构造函数和this指针

从汇编角度,清晰的去看构造函数和this指针到底是个什么东西呢?也许可以解决你的一点小疑问 首先写一个很简单的代码demo: class A{ public:int a;A(){;}void seta(int _a){a_a;}A* getA(){return this;} };int fun1(int px){return px; }in…

全新桌面编辑器

目录 前言 一、链接 ONLYOFFICE 8.1版本 官网下载链接: ONLYOFFICE 在线工具: 下载版本推荐: 二、使用体验 1. 界面设计: 2. 文档编辑功能: 3. 电子表格功能: 4. 演示文稿功能: 5.PDF编…

python-开关灯(赛氪OJ)

[题目描述] 假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到到 N 按顺序依次编号,初始时全部处于开启状态;第一个人( 1 号)将灯全部关闭,第二个人( 2 号)将…

nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点

目录 安装nginx配置nginx其它权限配置 安装nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下输入:set nu或:set number可以显示行号 复制如下内容: server {listen 80;server_name…

基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升&…

玩转Easysearch语法

Elasticsearch 是一个基于Apache Lucene的开源分布式搜索和分析引擎,广泛应用于全文搜索、结构化搜索、分析等多种场景。 Easysearch 作为Elasticsearch 的国产化替代方案,不仅保持了与原生Elasticsearch 的高度兼容性,还在功能、性能、稳定性…

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 ,测试结果 3.用Json来对其进行数据的传递 (1)Json是一个经常使用的用来表示对象的字符串 (2)Json字符串在字符串和对象…

Mysql数据库索引、事务相关知识

索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现 查看索引 show index from 表名;创建索引对于非主键、非唯一约束、非外键的字段&#…

JAVA ArrayList应用案例

一案例要求&#xff1a; 二代码&#xff1a; package 重修;import java.util.ArrayList; import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {ArrayList<String>arrayListnew ArrayList<>();array…