python中requests库结合xpath爬取所有研究院校名称,通过Pyecharts的Map和Geo(需要大学的经纬度)绘制全国地图同时实现点击省份跳转功能

引言

临近毕业季,毕设的压力时在心头,我们的毕设和考研有关,这里分享一下心得。只能说太难了!

安装

python版本

python3.8.8

开发环境

系统:windows10
编译器:sublimetext(随意,喜欢哪个自己选)

第三方库

  • lxml
  • numpy
  • pandas
  • requests
  • xlrd
  • xlwt
  • pyecharts


    注意:我安装的版本都是当时最新的



数据爬取和处理

第一步 获取所有研究院校名称

百度了所有的研究院校名单感觉不太靠谱,想到了研招网,作为研究生必备的官方网站必定可靠,所以决定爬取院校库中所有大学名称数据。

链接:研招网院校库
在这里插入图片描述
分析网页得知以下信息:

  • 数据总共43页
  • url最后变化的只有“?start=”后面的数字,第一页为0
  • 查看源代码,所有的数据在一个tbody标签下的tr标签中
  • 每个tr中第一个td标签下a标签中的文本就是大学名称

代码:

import requests
from lxml import etree
import re


# 爬虫
def spider(url,info):
    re = requests.get(url)  # get请求获取网页
    re.encoding='utf-8'  # 设置编码防止文字乱码
    html = re.text  # 获取页面数据
    selector = etree.HTML(html)
    contents = selector.xpath("//table[@class='ch-table']/tbody/tr")  # 获取所有的tr标签数据,格式为列表

    for data in contents:
        name = str(data.xpath("./td[1]/a/text()")[0])  # 获取大学名称
        info.append(name.strip())  # 加入info列表中,strip去除字符串两端空格


def save(info):
    f = open("school_name.txt", 'w',encoding='utf-8')  # w方式创建文件,默认会覆盖原有同名文件的数据,设置编码为utf-8
    for name in info:
        f.write(name+"\n")  # 循环写入大学名称,后面加了换行符实现一个名称占据一行
    f.close()

    
def main():
    infos = []  # 初始化的列表,注意在python中列表传入函数中被修改后会保存修改,利用这个特性保存爬虫数据
    base_url = "https://yz.chsi.com.cn/sch/?start="  # 网站基础url
    offset = 0 # 偏移量
    for i in range(0,43):  # 循环爬取所有页面的数据
        url = base_url + str(offset)
        spider(url, infos)
        offset += 20
        print("当前爬取进度为{}/43".format(i+1))
    save(infos)  # 调用save函数存储数据到本地


if __name__ == "__main__":
    main()

运行完成程序,在同级目录下获得了“school_name.txt”文件
在这里插入图片描述
可以再放入xls中方便以后使用,代码如下:

import xlwt


f = open('school_name.txt','r',encoding='utf-8')  # 打开文件
datas = f.readlines()  # 读取所有行

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('mysheet',cell_overwrite_ok=True)
sheet.write(0,0,'name')  # 写入字段名称

length = len(datas)  # 统计datas列表元素个数
print(length)

i = 1
j = 0
for line in datas:
    sheet.write(i, j, line.strip("\n"))  # 注意起始位置为第二行(i=1),第一行为字段名称
    i+=1
print("结束")
book.save('school_name.xls')  # 保存文件为xls
f.close()      

school_name.xls
在这里插入图片描述

第二步 获取所有研究院校的经纬度

我找了很久,免费的很少而且数据不太对劲,而需要积分的看到评论说骗子(本人也没CSDN积分)所以决定自己整理一下。既然找不到现成的数据我们就去爬取但是没有发现这样的网站,突然灵机一动。
百度:经纬度批量查询

果然有这样的工具,那就不客气了,直接将第一步爬取的所有大学名称放进去,大功告成?

NO,都是坑啊,当我兴高采烈的把最后的地图画出来了时候好家伙一片空白,怎么可能,都是我的心血啊,好烦……
没办法,回去检查数据,唉好家伙所有经纬度都一样,于是又换了一个,最后实验证明这个网站:https://maplocation.sjfkai.com/ 还算可靠,而且他会帮你生成xls文件可以下载到本地,可惜还是不尽如人意。

有不需要的字段,无所谓,删;数据缺失,没关系不多,用百度地图的坐标拾取系统一个一个查询;但是经过对比发现部分数据还是不对劲(似乎有些院校名称有问题或者有保密什么策略官网上都不写位置),就这样吧,大差不差。

整理成研究生经纬度.txt文件:
在这里插入图片描述

放入excel中,代码:

import xlwt


f = open('研究院校经纬度.txt','r',encoding='utf-8')
book 
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值