爬虫案例:中国高校排名(2021.1.3可爬代码)

article/2025/8/18 17:52:50

案例来源:北京理工大学网络课程《python网络爬虫与信息获取》
在实际上手操作中,发现视频中演示的代码无法完整运行,经个人探索后,记录如下
首先附上课程演示中提供的代码:

import requests
from bs4 import BeautifulSoup
import bs4def getHTMLText(url):try:r=requests.get(url,timeout=30)r.raise_for_status()r.encoding=r.apparent_encodingreturn r.textexcept:return ""; def fillUnivList(ulist,html):soup=BeautifulSoup(html,"html.parser")for tr in soup.find('tbody').children:if isinstance(tr,bs4.element.Tag):tds=tr('td')ulist.append([tds[0].string,tds[1].string,tds[2].string])def printUnivList(ulist,num):print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))for i in range(num):u=ulist[i]print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))def main():uinfo=[];url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'html=getHTMLText(url)fillUnivList(uinfo,html)printUnivList(uinfo,20)main()

首先案例中的网址已经有些变更,打开后实际跳转至https://www.shanghairanking.cn/rankings/bcur/2020
另外如果完全复制上述代码运行,会发现变量命名错误,其uinfo和ulist应该统一成一个变量
在这里插入图片描述
修改上述问题后,执行代码会发现提取关键信息的语句也失效了,抓取不到信息
在这里插入图片描述
在这里插入图片描述
重新分析网页源码,可以看到所有学校信息放在tbody下
在这里插入图片描述
抽取其中的一个信息看一下:
在这里插入图片描述
在这里插入图片描述
我们需要的信息现在在第1、2、5的位置,其中清华大学在子节点a中,直接tr('td')[1].string无法获取,要改成tr('td')[1].a.string

排名和总分直接string也是获取不到的,这里我想到的办法是用手动转化成字符串
在这里插入图片描述
综上,获取信息的关键代码我修改成了:

ulist.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()])

完整代码如下

"""实例1,中国大学排名"""
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def fillUnivLIst(ulist, html):soup = bs4.BeautifulSoup(html, "html.parser")for tr in soup.find('tbody').children:#检测tag类型,过滤非tag类型标签if isinstance(tr, bs4.element.Tag):tds = tr('td')ulist.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()])return ulistdef printUnivList(ulist, num):#tplt = "{0:^10}\t{1:{3}^6}\t{2:^10}"print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
#     print(tplt.format("排名","学校名称","总分",chr=(12288)))for i in range(num):u=ulist[i]print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
#         print(tplt.format(u[0],u[1],u[2],chr=(12288)))def main():ulist = []url = 'https://www.shanghairanking.cn/rankings/bcur/2020'html = getHTMLText(url)ulist = fillUnivLIst(ulist, html)printUnivList(ulist, 20)main()

运行结果如下:
在这里插入图片描述
最后,至于排版的优化问题,视频中提供的方案我试了下报错了,问题暂时没有解决,暂且搁置往后有空再说吧
在这里插入图片描述


http://chatgpt.dhexx.cn/article/viubDTq9.shtml

相关文章

中国传统节日春节网页HTML代码 学生网页课程设计期末作业下载 春节大学生网页设计制作成品下载 DW春节节日网页作业代码下载

传统节日春节网页作品 网页内容知识点应用效果描述网页预览网页下载 网页内容 中国传统节日——大学生春节网页设计作品采用DIV CSS布局制作,共6个页面,网页内容主要覆盖:春节简介、节日起源、传统习俗、民族特色、社会效应、国际影响。 知…

java怎么跳转到某一行_java中如何跳转到指定位置?

java中如何跳转到指定位置? yhn80597 LV11 2013-06-20 我的意思是能不能使用什么语句跳转到任意指定的位置?不一定是只跳出循环,比如我下面写了2个类,能不能在一个类中使用跳转语句跳转到另一个类中的指定位置继续执行?下面是我的例子。。。。package com.cq;import java…

AndroidStudio登录注册界面跳转

这里写目录标题 1.登录界面编写1.1顶部图片1.2账号提示输入框1.3密码提示输入框1.4记住密码自动登录插图1.5登录按钮1.6 还没有账号提示1.7加一些文本信息 2.注册页面编写3.界面跳转 1.登录界面编写 新建module-生成MainActivity Java文件和activity_main XML文件 在XML文件中…

恶意代码分析实战

安全技术大系 恶意代码分析实战(最权威的恶意代码分析指南,理论实践分析并重,业内人手一册的宝典) 【美】Michael Sikorski(迈克尔.斯科尔斯基), Andrew Honig(安德鲁.哈尼克)著 …

echarts,map中国地图点击各省,跳转展示,从省返回到中国地图【china.js】

效果图&#xff1a; 1.点击省&#xff0c;跳转到河北省 2.返回&#xff0c;从省返回到中国地图 话不多说&#xff0c;直接上代码&#xff0c;1.复制粘贴&#xff0c;2.在引入对应js即可 注&#xff1a;全部各省地图&#xff0c;下载地址&#xff1a;** <!DOCTYPE html>…

利用pyecharts实现中国省与市之间的跳转

利用pyecharts实现中国省与市之间的跳转 需求需要的包参考正文读取excel中的数据生成全国地图生成各省份地图将全国地图与各省市地图相互链接 需求 地图上显示中国各省份名称及相对应的数据&#xff08;存于excel中&#xff0c;数据可自己定义读取&#xff09;&#xff0c;随鼠…

html弹跳qq群号代码,抖音上QQ群霸屏消息代码分享_抖音上QQ群霸屏消息代码大全-街机中国...

今天抖音上很多人拍摄在QQ中发送代码&#xff0c;可以让表情霸屏的视频。小编的QQ群也收到了很多霸屏贴表情消息。 首先 复制代码&#xff1a;sticker_start_tag_for_text{"originMsgType":0,"x":0.07037036865949631,"y":0.97685185223817825,&…

微信小程序点击跳转页面

第一步&#xff1a;index.wxml <button bindtap"gotoPage" style"color: rgb(151, 27, 27);">详情页面</button> 第二步&#xff1a;index.js // 详情页面跳转页面gotoPage: function (options) {wx.navigateTo({url: /pages/xiang/xiang,…

中国地图实现点击某省市区域跳转到相应页面

源码下载见页底 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>中国地图-点见省市区域页面跳转</title></head><body><style>#main{background-color: #B1D0EC;width: 600px; height: 600px; ma…

java的html跳转,java跳转html并传值

java跳转html并传值 [2021-01-30 05:39:20] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教 php实现跳转传值的…

java jmap_Java常用分析工具之jmap

简介 jmap是JDK中提供的一个用来监视进程运行中的jvm物理内存的占用情况的工具。该进程内存内&#xff0c;所有对象的情况&#xff0c;例如产生了哪些对象&#xff0c;对象数量。当系统崩溃时&#xff0c;jmap 可以从core文件或进程中获得内存的具体匹配情况&#xff0c;包括He…

JVM工具之jmap命令使用

写在前面 该命令可用于查看虚拟机中对象实例数以及占用空间大小&#xff0c;生成堆转储文件&#xff0c;之后结合jvirsualvm等工具进行可视化查看&#xff0c;辅助定位程序的内存异常问题。 测试代码 public class ManyObj {private static List<People> peopleList …

JVM命令行监控工具之jmap(JVM Memory Map)

jmap简介 jmap(JVM Memory Map)一方面可以获取dump文件&#xff08;堆转储快照文件&#xff0c;二进制文件&#xff09;&#xff0c;它还可以获取目标Java进程的内存相关信息&#xff0c;包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。 选项作用-dump生成…

jmap详解

这里写自定义目录标题 简介理论知识实践部分1. 找到进程id2. 生成内存快照3. Java堆和方法区的详细信息、内存空间使用率、当前用的是哪种收集器 简介 这个命令非常重要&#xff0c;主要是生成java进程当前&#xff08;当前指的是执行命令的时刻&#xff09;内存堆转储快照&am…

jmap的使用以及内存溢出分析

jmap的使用以及内存溢出分析 jmap(java内存映像工具) jmap(Memory Map for Java&#xff09;命令用于生成堆转储快照&#xff08;一般称为heapdump或dump文件&#xff09;。还有几种方式获取dump文件&#xff1a;使用JVM参数选项-XX:HeapDumpOnOutOfMemoryError参数&#xff…

Java的jmap命令使用详解

jmap命令简介 jmap&#xff08;Java Virtual Machine Memory Map&#xff09;是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具。除此以外&#xff0c;jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息&#xff0c;比如空间使用率、当前使用…

Python Numpy .npy文件打开

首先找到你的npy文件的路径&#xff08;我的npy文件在D盘下&#xff0c;名字叫test.npy&#xff09; 2 打开编写python的软件&#xff08;我的软件是pycharm&#xff09; 3 新建一个python文件&#xff0c;用于后面的编程使用。&#xff08;我先建的python文件名叫test&#xf…

Numpy文件交互:.npy和.npz有什么区别?

文章目录 saveloadsavezsavez_compressed Numpy提供了以.npy为后缀的文件存储方案&#xff0c;与这种文件格式密切相关的读、写函数分别是np.load和np.save。通过savez可以一次性存储多个数组&#xff0c;并可通过load以键值对的形式读取出来&#xff1b;如果觉得文件太大&…

什么是npy文件,为什么要用npy格式保存文件?

文章目录 一、官方文档&#xff08;中文&#xff09;二、官方文档&#xff08;英文&#xff09;三、为什么要用npy文件保存文件四、读取和保存&#xff08;1&#xff09;加载npy文件&#xff0c;并将npy文件写入一个txt文件&#xff08;2&#xff09;保存npy文件&#xff08;3&…

深度学习入门之如何制作npz、npy文件

一、需求 论文《EyeTracking for everyone》中提出了iTracker神经网络,并构建了一个叫GazeCapture的数据库,将其部分数据集下载后,可以看到文件的层次结构如下图所示: 其中,整个数据集的后缀名是npz,内部文件的后缀名是npy。由于该数据集是面向Apple产品系列的,而我的…