python 爬阳光高考高校数据_爬取阳光高考-程序员宅基地

技术标签: python  1024程序员节  

import json
import time
from requests_html import HTMLSession


# 爬取阳光高考院校库
def get_school_data():
    # 开启会话
    session = HTMLSession()
    # 初始化院校列表
    school_list = []
    # 分页参数,起始位置
    start = 1
    # 分页参数,每页条数,阳光高考院校库默认为20条/页
    limit = 10
    # 开始执行时的时间
    start_time = time.time()
    print("阳光高考院校库爬取任务")
    print("开始执行...")
    # 分页循环获取
    while True:
        # 阳光高考院校库查询网址
        # url = 'https://gaokao.chsi.com.cn/sch/search.do?searchType=1&start=' + str(start)
        url = 'https://gaokao.xdf.cn/college/china/searchSchool/_____'+str(start)
        # 获取请求到的html
        r = session.get(url)
        # 从中获取到院校库的table中的所有文字
        result = r.html.find("body > div.main > div.container > div.main-table > table > tbody > tr")

        # 初始化本次循环的数据列表
        this_list = []
        for res in result:
            text = res.text
        # 通过.将字符串拆分为数组,对本次循环获取到的分页数据进行循环处理
            # 每一条数据通过换行符拆分为数组
            arr = text.split("\n")
            # 初始化院校信息
            school = {}
            # 如果长度为1,则为通过.拆分时的最后一条无用信息,直接跳过
            if len(arr) == 1:
                continue

            if len(arr) == 9:
                school.update({"name": arr[0], "area": arr[1], "property": arr[2], "type": arr[3], "level": arr[4], "attrs": arr[5]})
            else:
                school.update({"name": arr[0], "area": arr[1], "property": "", "type": "", "level": "", "attrs": ""})
            # property = ""
            # if not arr[2]:
            #   property = arr[2]
            #
            # type = ""
            # if not arr[3]:
            #     type = arr[3]
            #
            # level = ""
            # if not arr[4]:
            #     level = arr[4]
            #
            # attrs = ""
            # if not arr[5]:
            #     attrs = arr[5]
            #
            # if property is None:
            #      property = ""
            #
            # if type is None:
            #      type = ""
            #
            # if level is None:
            #     level = ""
            #
            # if attrs is None:
            #     attrs = ""



            # 将院校追加到本次循环结果的数组中
            this_list.append(school)
            # 将院校追加到总的结果中
            school_list.append(school)
        print("爬取第 " + str(int(start)) + " 页,本页获取到 " + str(len(this_list)) + " 条数据")
        # 如果本次分页循环的长度小于分页的每页长度,说明本次为最后一页数据,数据读取完毕,终止循环
        if len(this_list) < limit:
            break
        # 否则起始位置需要加上一页
        start += 1
    # 执行完毕时的时间
    end_time = time.time()
    print("执行完毕,耗时 " + str(round(end_time - start_time, 2)) + " 秒,共获取到 " + str(len(school_list)) + " 条数据")
    # 关闭会话
    session.close()
    # 返回结果
    return school_list


# 保存为JSON数组
def save_json_data(school_list):
    data = open('./data.json', 'w')
    data.write(json.dumps(school_list, ensure_ascii=False, ).encode("utf8").decode())
    print("已保存为JSON数组(./data.json)")


# 保存为SQL可执行文件
def save_sql_file(school_list):
    school_sql = "insert into ant_user_school(name,area,property,type,level,attrs) values "
    for school in school_list:
        school_sql += "('" + school["name"] + "','" + school["area"] + "','" + school["property"] + "','" + school["type"] + "','" + school["level"] + "','" + school["attrs"] + "'),"
    if school_sql.endswith(","):
        school_sql = school_sql[0:-1]
    data = open('./data.sql', 'w')
    data.write(school_sql)
    print("已保存为SQL可执行文件(./data.sql)")


data = get_school_data()
# save_json_data(data)
save_sql_file(data)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39175589/article/details/120941940

智能推荐

桌面开发者的界面故事,该醒醒了-程序员宅基地

文章浏览阅读43次。本文我们只谈界面。 大部分人最开始学习编程是Console,搞个计算器啥的,后来高级一点能做一个俄罗斯方块出来。很羡慕那些能做出界面的,于是大二学了MFC,一开始看《深入浅出》怎么都搞不懂,后来我们班的一个女生教了我两个小时,我一下子通畅了,用GDI半个月苦哈哈的做了第一个当时觉得还能看得界面(不用任何控件哦)连箭头都是用三根线拼起来的! ...

解决C语言创建链表时出现的问题:引发了异常: 读取访问权限冲突_c语言链表创建时出现访问权限冲突怎么办-程序员宅基地

文章浏览阅读715次,点赞11次,收藏12次。这里可以看到,在打印时传入的地址与1中的head地址并不相同,从而在读取链表head地址时并不是1中的head的地址,也就出现了如上的情况。这里楼主也不清楚具体是什么导致了传入地址的变化,还望有大佬指点。我也参考了另一位楼主的解决办法,如下。既然通过逐行运行得知是传入PrintList的地址不一致而导致的,那么这里将CreateList函数的类型进行修改,并返回head的地址。当数据元素输入完后,红圈这里head指向的地址我们先记住,接下来我们对输入的数据进行打印。第一次写文章,如有问题还望有大佬指点。_c语言链表创建时出现访问权限冲突怎么办

Added a key not lexically larger than previous.-程序员宅基地

文章浏览阅读3.2k次。跑批问题:Caused by: java.io.IOException: Added a key not lexically larger than previous. Current cell = 10000000414/aml_custinfo:address/1594509705240/Put/vlen=42/seqid=0, lastCell = 10000000414/aml_custinfo:watchcustflag/1594509705240/Put/vlen=1/seqid=0报错_added a key not lexically larger than previous

查看linux服务器 频率,LInux查看服务器硬件信息-程序员宅基地

文章浏览阅读378次。Hi,大家好;今天是双12,大家剁手了没。今天给大家带来的是《Linux查看服务器上的硬件信息》本篇文章的示例全部是在服务器(Inspur SA5112M4)上实现的,有些命令在虚拟机上达不到效果查看服务器型号、序列号root@zhangdaifu# dmidecode -s system-serial-numberroot@zhangdaifu# dmidecode -t system | gr..._crystal beach /dma

MATLAB一元函数与二元函数求极小值_matlab中求解2变量函数的极小值-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏6次。MATLAB一元函数与二元函数求极小值_matlab中求解2变量函数的极小值

MySQL学习_mysql possible key有值但是key为null-程序员宅基地

文章浏览阅读734次。Mysql的三大范式,存储引擎、索引、sql的执行计划、count()计数的区别,事务,简单sql调优,索引失效场景、jdbcTemplate查询类获取时间没有时分秒、连接mysql时区配置,jaskson转json时区配置..._mysql possible key有值但是key为null

随便推点

【数据结构】八大排序之快速排序算法-程序员宅基地

文章浏览阅读1.2k次,点赞25次,收藏29次。数据结构快速排序详解.内容包括:快排的简介及思想,快排代码实现的三种方式,快排的时间复杂度分析,快排的优化,快排的非递归实现,快排的三路划分算法.

PHP判断是否手机端或PC端访问_php判断手否电脑端-程序员宅基地

文章浏览阅读461次。1.在PublicController控制器中写好判断手机端方法。<?phpnamespace Home\Controller;use Think\Controller;class PublicController extends Controller { //判断是否是手机端还是电脑端 function isMobile(){ // 如果有Ht_php判断手否电脑端</div>

python将列表元素连接_python中列表元素连接方法join用法实例-程序员宅基地

文章浏览阅读4.9k次。本文实例讲述了python中列表元素连接方法join用法。分享给大家供大家参考。具体分析如下:创建列表:>>> music = ["Abba","Rolling Stones","Black Sabbath","Metallica"]>>> print music输出:['Abba', 'Rolling Stones', 'Black Sabbath', 'Me..._python将list使用/n连接起来

HTML表格标签的基础用法与实例_html表格例子-程序员宅基地

文章浏览阅读561次。文章目录一、表格的作用二、表格骨架标签三、表格的样式四、表格其他标签五、合并单元格六、综合练习一、表格的作用在CSS还未普及的时候一些简单的网站使用表格布局是十分快捷的,开发人员只要按照需求,简单的对表格进行行列的拆分,就能实现设计页面的布局;随着互联网的发展以及CSS的普及用户的审美提升,表格布局渐渐淡出了布局手段行列。虽然表格现在不常用于布局,但是在展示一些后台数据的时候表格可以让数据显示的非常清晰规整,阅读起来十分方便,所以我们常用表格来展示一些数据。二、表格骨架标签<table>_html表格例子

[C方向]作业集锦_方向作业-程序员宅基地

文章浏览阅读284次。## 点击蓝色字体可跳转至相应文章,尔后文章待续... 1.New Code day11. 打印100~200 之间的素数 2. 输出乘法口诀表 3. 判断1000年---2000年之间的闰年 2.New Code day21.给定两个整形变量的值,将两个值的内容进行交换。 2.不允许创建临时变量,交换两个数的内容(附加题) 3.求10 个整数中最大值。 ..._方向作业

Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-manager、kube-scheduler_kube-controller-manager 配置-程序员宅基地

文章浏览阅读1.1k次,点赞11次,收藏8次。scheduler通过 kubernetes 的监测(Watch)机制来发现集群中新创建且尚未被调度到 Node 上的 Pod。 scheduler会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 scheduler会依据下文的调度原则来做出调度选择。Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuot_kube-controller-manager 配置

推荐文章

热门文章

相关标签