获取2020年中国大学前20名在各省分布(python实现)
获取中国好大学前20名在各省分布
需求分析:
(1)访问中国好大学网站,爬取2020年最好大学排名,统计全国排名前二十名的大学在各省的分布情况。
1.指定url
url = 'http://www.gaosan.com/gaokao/239012.html'
2.UA伪装
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
3.分析对应网页得到我们需要发出什么请求:
这里因为我们只是为得到其中的文本数据没有涉及到动态的过程所以可以直接使用get请求
或者进行以下操作判断:
1.得到页面右击检查选择network点击页面刷新
2.选择其中的HTML文件可以看到请求方法为get
4.发出请求得到对应的响应对象
getdata = requests.get(url=url, headers=header)
getdata.encoding = 'utf-8'//为了之后可以使用页面的文字内容且不出现乱码
5.由响应对象得到响应数据
showdata = getdata.text//text是得到页面的文本数据
//这里可以先使用print(showdata)打印页面判断是否得到了响应数据
6.从页面信息中提取到我们需要的信息:
可以使用
- 正则匹配
- bs4
- xpath
由于xpath的简单易用且通用性较高,所以这里使用xpath进行数据的提取
ans = etree.HTML(showdata)//实例化一个etree对象
end = ans.xpath('//table[@border="1"]/tbody/tr')//借助etree中xpath函数匹配内容
通过抓包工具找到对应的我们要数据的代码段
通过分析其中的代码得到xpath表达式
或者可以使用右键加copy选择其中的xpath表达式(不推荐,自己写可以增加对xpath表达式的理解)
详解xpath:
- xpath解析原理:
- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。- 环境的安装:
- pip install lxml
- 如何实例化一个etree对象:from lxml import etree
- 1.将本地的html文档中的源码数据加载到etree对象中:
etree.parse(filePath) - 2.可以将从互联网上获取的源码数据加载到该对象中
1.page_text=request.get(url=url,headers=header).text
2.etree.HTML(‘page_text’) - xpath(‘xpath表达式’)
- 1.将本地的html文档中的源码数据加载到etree对象中:
- xpath表达式:
- /:表示的是从根节点开始定位。表示的是一个层级。
- //:表示的是多个层级。可以表示从任意位置开始定位。可以找到所有的标签
- 属性定位://div[@class=‘song’] 通用:tag[@attrName=“attrValue”]
- 索引定位://div[@class=“song”]/p[3] 索引是从1开始的。
- 取文本:
/text() 获取的是标签中直系的文本内容(最后得到的是列表的形式,可以使用[]将其中的文本取出来
eg: …/text())[0]//text() 标签中非直系的文本内容(所有的文本内容)
- 取属性:
/@attrName ==>img/@src(img是标签 src是属性值)
- 环境的安装:
7.持续化存储:
result = {}j = 0for i in end[1:21:1]:pp = (i.xpath('./td/text()'))[2]xuname = (i.xpath('./td/text()'))[1]if (pp in result):result[pp].append(xuname)else:rep = {pp: [xuname]}result.update(rep)#若字典中不存在当前关键字则向字典中插入#下面将其数据保存在Excel中wb = xlwt.Workbook()ws = wb.add_sheet('test')ws.write(0, 0,'省份')ws.write(0, 1, '学校名称')i = 1for data in result:ws.write(i,0,data)j = 1for io in getvalue(result,data):ws.write(i, j, io)j += 1i += 1wb.save('./test3.xls')
除了使用普通的文件写入方式还可以使用pandas写入
总括:
import requests
from lxml import etree
import xlwt
#coding=utf-8
if __name__ == '__main__':header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}# 任务1.爬取中国前20各省份分布url = 'http://www.gaosan.com/gaokao/239012.html'getdata = requests.get(url=url, headers=header)getdata.encoding = 'utf-8'showdata = getdata.textans = etree.HTML(showdata)end = ans.xpath('//table[@border="1"]/tbody/tr')result = {}j = 0for i in end[1:21:1]:pp = (i.xpath('./td/text()'))[2]xuname = (i.xpath('./td/text()'))[1]result.setdefault(pp,[]).append(xuname)# print(result)wb = xlwt.Workbook()ws = wb.add_sheet('test')ws.write(0, 0,'省份')ws.write(0, 1, '学校名称')i = 1for data in result:ws.write(i,0,data)j = 1for io in result[data]:ws.write(i, j, io)j += 1i += 1wb.save('./test3.xls')
结果:
拓展:实现USNEWS美国大学排名的爬虫,并打印结果。
url = 'https://www.liuxue86.com/html/show-3932021-1.html'getdata = requests.get(url=url, headers=header)getdata.encoding = 'utf-8'getdata = getdata.textresult1 = []op= etree.HTML(getdata)ans=op.xpath('//div[@class="main_zhengw"and @id="article-content"]/table/tbody/tr')for i in ans[2:101:1]:pai = i.xpath('./td[1]/text()')[0]xuename = i.xpath('./td[2]/text()')[0]place = i.xpath('./td[3]/text()')[0]end = {'美国大学排名': str(pai),'学校名称': xuename,'地址': place}result1.append(end)wb=xlwt.Workbook()ws=wb.add_sheet('test')ws.write(0,0,'美国大学排名')ws.write(0,1,'学校名称')ws.write(0,2,'地址')i=1for data in result1:j=0for io in data:ws.write(i,j,data[io])j+=1i+=1wb.save('./test2.xls')
结果:
爬虫新手,有错误的地方还望指教
获取2020年中国大学前20名在各省分布(python实现)相关推荐
- 中国大陆5所院校入选2022 QS亚洲地区大学前10名;中国内地被评为全球进步最快的养老金体系 | 美通社头条...
要闻摘要:中国大陆5所院校入选2022 QS亚洲地区大学前10名.中国内地被评为全球进步最快的养老金体系.亚马逊云科技宣布新量子计算中心正式启用.特赞完成D1轮融资成内容科技独角兽.Visa启动&qu ...
- 2020年中国第七次人口普查各省总人口数据可视图(1)
系列:人口交互可视化图表 最近在做plotly可视化交互图标的联系,先做了两张图表,分别是2020年中国第七次人口普查各省市和各城市总人口数据图表: 全国人口是指我国大陆31个省.自治区.直辖市和现役 ...
- 中国大学前10强!校友会2020世界一流大学排名发布
转载于:艾瑞深校友会网 仅作分享,不代表本公众号立场,侵权联系删除 2020年5月,全国第三方大学评价咨询机构艾瑞深校友会网(Cuaa.Net)撰写完成的<2020中国大学评价研究报告-高考志愿 ...
- 重磅 | 《2020年度中国计算机视觉人才调研报告》正式出炉
计算机视觉领域岗位人才供需比为0.09,相关人才属于极度稀缺程度. -全文共11308字,阅读需要34分钟- 随着人工智能应用场景的拓展,我国正在不断促进人工智能技术落地,大力培养人工智能应用型人才. ...
- 全球及中国大健康产业投资潜力与运营价值分析报告2022-2028年
全球及中国大健康产业投资潜力与运营价值分析报告2022-2028年 ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ ➜ <修订日期>:2 ...
- 2020年中国休闲渔业产业现状分析,整体产业快速扩展,疫情下产业市场受阻「图」
一.休闲渔业产业概述 休闲渔业是以钓鱼运动为核心的综合性休闲旅游产业.我国海洋休闲渔业在20世纪90年代在广东.福建和浙江等沿海省市休闲渔业开始兴起.之后随着滨海旅游业的迅猛发展,催化了休闲渔业在我国 ...
- 2021年中国大屏幕拼接系统市场趋势报告、技术动态创新及2027年市场预测
大屏幕拼接系统市场的企业竞争态势 该报告涉及的主要国际市场参与者有Mitsubishi Electric.Sony Corporation.Delta Electronics.Samsung.NEC ...
- 华为云位居IDC中国大数据平台市场研究报告第一
近日,全球领先的IT研究和咨询公司国际数据公司(IDC)最新发布<中国大数据平台市场研究报告-2020>,报告显示:2020年中国大数据平台软件市场规模92.2亿元人民币,华为云凭借Fus ...
- 2020年中国钓具市场现状分析,出口持续增长,整体企业众多,格局未明「图」
一.钓具产业概述 钓鱼产业以业余休闲为主,更多的重心在于全民参与,因此钓具是产业链的核心.钓具商与饵料商主要承担着为垂钓者提供各类垂钓工具和辅助用具的服务.钓具的种类繁多,主要分为钓鱼竿.鱼钩.渔线轮 ...
最新文章
- SpringBoot系列二:搭建自己的第一个SpringBoot程序
- Failed to resolve:aar
- 对CAS机制的理解(二)
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1094:与7无关的数
- 使用mysqladmin命令修改MySQL密码与忘记密码
- edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...
- Firebug无法添加到最新版firefox55.0.*中解决办法
- SqlHelper 类
- win8这台计算机到桌面上,Win8如何在桌面上显示“我的电脑”图标,小编教你Win8如何在桌面上显示我的电脑...
- n9 android模拟器,Android软件将兼容诺基亚N9
- ATLAS.ti 9(质性研究分析软件)官方中文版V9.0.20.0 | 质性分析软件Atlas.ti下载 | atlas软件是什么软件
- 腾讯,字节等大厂面试真题汇总,赶快收藏备战金九银十!
- Tic-Tac-Toe可能棋局搜索的实现(python)
- 计算机重装后如何连接无线网络,笔记本重装系统后无法连接无线网络怎么办
- IPFS系列 - 体验 IPFS Docker
- C语言九:位域(位域声明、位域的定义和位域变量的说明、对于位域定义的几点说明:、位域的使用)、typedef(typedef vs #define)、强制类型转换(整数提升、常用的算术转换)
- Tableau 网站流量分析案例之浏览量分析(二)
- 新唐单片机 ICP 史上最全教程
- 计算机辐射测试,测试计算机的电磁辐射
- 基于Ha-Joker靶场的完整渗透测试演示直至提权(root)
热门文章
- 中国的数字化转型 China’s digital transformation
- golang bilibili直播弹幕姬
- unity3d:弹道飞行
- pdf转txt java_pdf转换txt怎么操作?pdf文件可以转换成txt文件吗?
- 如何自己搭建本地代理IP池并验证是否可用
- 阿里云天池大赛赛题(机器学习)——O2O优惠券预测(完整代码)
- java编写关机恶搞程序,VB关机恶搞小程序
- win7桌面右下角有计算机图标,win7系统电脑任务栏右下角图标空白的解决方法
- scikit-image库-- 圆形和椭圆形霍夫变换(十七)
- 11 万字的字节码编程系列合集放送(ASM、Javassist、Byte-buddy、Javaagent)