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

本文介绍了如何利用Python的requests库和xpath爬取研招网上的研究院校名称,结合Pyecharts的Map和Geo绘制全国高校分布地图,并实现点击省份跳转功能。在数据处理过程中,作者遇到并解决了经纬度数据的准确性问题,最后通过金苹果中国科教评价网获取地域排名,成功展示了各地区前几名的大学。
摘要由CSDN通过智能技术生成

引言

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

安装

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'
要使用requestsxpath爬取链家租房的信息,可以按照以下步骤进行操作: 1. 首先,需要导入requests和lxml,用于发送请求和解析HTML页面。可以使用以下代码导入: ```python import requests from lxml import etree ``` 2. 然后,需要构造请求头和URL,发送请求获HTML页面。可以使用以下代码发送请求: ```python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } url = 'https://bj.lianjia.com/zufang/' response = requests.get(url, headers=headers) html_str = response.text ``` 3. 接下来,可以使用lxml的etree模块来解析HTML页面,并使用xpath表达式提所需的房源信息。可以使用以下代码进行解析和提: ```python html = etree.HTML(html_str) house_list = html.xpath('//div\[@class="content__list"\]/div\[@class="content__list--item"\]') for house in house_list: area = house.xpath('.//p\[@class="content__list--item--des"\]/a\[1\]/text()')\[0\] community = house.xpath('.//p\[@class="content__list--item--des"\]/a\[2\]/text()')\[0\] layout = house.xpath('.//p\[@class="content__list--item--des"\]/span\[1\]/text()')\[0\] size = house.xpath('.//p\[@class="content__list--item--des"\]/span\[2\]/text()')\[0\] orientation = house.xpath('.//p\[@class="content__list--item--des"\]/span\[3\]/text()')\[0\] price = house.xpath('.//span\[@class="content__list--item-price"\]/em/text()')\[0\] print(area, community, layout, size, orientation, price) ``` 4. 最后,可以将提到的房源信息保存到Excel文件。可以使用pandas来创建DataFrame对象,并使用to_excel方法将数据保存到Excel文件。可以使用以下代码进行保存: ```python import pandas as pd data = pd.DataFrame({ '地区': area_list, '小区名': community_list, '户型': layout_list, '面积': size_list, '朝向': orientation_list, '价格(元/月)': price_list }) data.to_excel('house_info.xlsx', index=False) ``` 以上就是使用requestsxpath爬取链家租房信息的步骤。通过发送请求获HTML页面,使用xpath表达式提所需的信息,并将提到的信息保存到Excel文件。 #### 引用[.reference_title] - *1* *2* [利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件](https://blog.csdn.net/renhongbin614/article/details/104540204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [爬虫三:用xpath爬取链家网二手房信息](https://blog.csdn.net/qq_23860475/article/details/103505587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值