引言
临近毕业季,毕设的压力时在心头,我们的毕设和考研有关,这里分享一下心得。只能说太难了!
安装
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 = xlwt.Workbook(encoding='utf-8'