爬虫(五)“中国大学排名定向爬虫”实例_爬虫中国大学排行案例-程序员宅基地

技术标签: # Python&爬虫  

0.实例介绍

右键点击查看源代码,ctrl+f查找清华大学找到相应数据。

查看robots协议:http://www.zuihaodaxue.cn/robots.txt 发现不存在,说明可以爬。

1.实例编写

import requests
from bs4 import BeautifulSoup #只是引入bs4类
import bs4  #引入bs4库

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return ""
 
def fillUnivList(ulist,html):
    soup=BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children: #tr即每所大学
        if isinstance(tr,bs4.element.Tag): #判断类型
               tds=tr('td') #要对tr标签的td标签作查询
               ulist.append([tds[0].string,tds[1].string,tds[2].string])
               #将所有的td标签存在一个列表类型tds

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.com/zuihaodaxuepaiming2019.html'
    html=getHTMLText(url)
    fillUnivList(uinfo,html)#从html信息提取后放在uinfo变量中
    printUnivList(uinfo,20)  # 20 univs
main()

输出结果为:

    排名    	 学校名称 	    总分    
    1     	 清华大学 	    北京    
    2     	 北京大学 	    北京    
    3     	 浙江大学 	    浙江    
    4     	上海交通大学	    上海    
    5     	 复旦大学 	    上海    
    6     	中国科学技术大学	    安徽    
    7     	华中科技大学	    湖北    
    7     	 南京大学 	    江苏    
    9     	 中山大学 	    广东    
    10    	哈尔滨工业大学	   黑龙江    
    11    	北京航空航天大学	    北京    
    12    	 武汉大学 	    湖北    
    13    	 同济大学 	    上海    
    14    	西安交通大学	    陕西    
    15    	 四川大学 	    四川    
    16    	北京理工大学	    北京    
    17    	 东南大学 	    江苏    
    18    	 南开大学 	    天津    
    19    	 天津大学 	    天津    
    20    	华南理工大学	    广东  

2.实例优化

优化原因:学校名称的中文格式不齐。

import requests
from bs4 import BeautifulSoup #只是引入bs4类
import bs4  #引入bs4库

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return ""
 
def fillUnivList(ulist,html):
    soup=BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children: #tr即每所大学
        if isinstance(tr,bs4.element.Tag): #判断类型
               tds=tr('td') #要对tr标签的td标签作查询
               ulist.append([tds[0].string,tds[1].string,tds[2].string])
               #将所有的td标签存在一个列表类型tds

def printUnivList(ulist,num):
    tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名","学校名称","总分",chr(12288)))
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))

def main():
    uinfo=[] #将大学信息放在这个列表中
    url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
    html=getHTMLText(url)
    fillUnivList(uinfo,html)#从html信息提取后放在uinfo变量中
    printUnivList(uinfo,20)  # 20 univs
main()

输出为

    排名    	   学校名称   	    总分    
    1     	   清华大学   	    北京    
    2     	   北京大学   	    北京    
    3     	   浙江大学   	    浙江    
    4     	  上海交通大学  	    上海    
    5     	   复旦大学   	    上海    
    6     	 中国科学技术大学 	    安徽    
    7     	  华中科技大学  	    湖北    
    7     	   南京大学   	    江苏    
    9     	   中山大学   	    广东    
    10    	 哈尔滨工业大学  	   黑龙江    
    11    	 北京航空航天大学 	    北京    
    12    	   武汉大学   	    湖北    
    13    	   同济大学   	    上海    
    14    	  西安交通大学  	    陕西    
    15    	   四川大学   	    四川    
    16    	  北京理工大学  	    北京    
    17    	   东南大学   	    江苏    
    18    	   南开大学   	    天津    
    19    	   天津大学   	    天津    
    20    	  华南理工大学  	    广东

3.单元小结

1
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35812205/article/details/104271653

智能推荐

BZOJ 3631 松鼠的新家-程序员宅基地

文章浏览阅读269次。题意: 有一棵树,n个节点,从a1出发->a2->a3->…->an,(a为一个排列),每经过一个节点时,该节点加一,问最终每个节点的值 思路: 类似差分,lca(u,v)+1,u-1,v-1,从上往下统计答案就可以了 u+1,v+1,lca(u,v)-1,fa[lca[u,v]]-1,从下往上扫描#include#include#

SUMO入门(三) - 路网_sumo 路网-程序员宅基地

文章浏览阅读9.5k次,点赞4次,收藏25次。SUMO入门(三) - 路网SUMO network file 网络文件描述了交通相关的地图、道路和交叉口。虽然XML文件我们可读,但SUMO网络文件并不是手工编辑的。您可以将SUMO XML描述文件与NETCONVERT一起使用;您还可以使用NETCONVERT以各种格式转换现有地图;或使用NETGENERATE生成几何简单的抽象路线图。要修改现有的 .net.xml 文件,您可以使..._sumo 路网

编译android源码报错:build/envsetup.sh: 1: Syntax error: "(" unexpected_./envsetup.sh: 1: syntax error: "(" unexpected-程序员宅基地

文章浏览阅读1.1k次。编译android源码报错:build/envsetup.sh: 1: Syntax error: "(" unexpected编译android源码时报错:build/envsetup.sh: 1: Syntax error: "(" unexpected解决方法:执行$sudo dpkg-reconfigure dash命令,并选择“否”_./envsetup.sh: 1: syntax error: "(" unexpected

2021-07-02 swift大礼包-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏5次。全面的Swift学习资料整理_walkerwqp的博客-程序员宅基地 全面的Swift学习资料整理 ...

ImageView 使用详解-程序员宅基地

文章浏览阅读1.7w次,点赞3次,收藏82次。极力推荐文章:欢迎收藏Android 干货分享本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、ImageView 的继承关系二、ImageView 常用方法三、ImageView 背景 间距属性设置四、使用Bitmap 类型动态设置ImageView 资源五、ImageView 图片倒影实现六、ImageV..._imageview

目前市场上的电脑一体机从计算机种类,一体机电脑与普通电脑的区别-程序员宅基地

文章浏览阅读639次。现在,市场上开始流行一体机电脑了,很多网友可能会对一体机电脑感兴趣。下面,本文针对市场上的一体机电脑优劣作一个简要说明。一、一体机电脑的好处由于一体机电脑,所有的设备都封装在同一个容器内,就连显示屏都和电脑的设备融为一体了。因此,一体电脑的放置、携带,是相当的方便。它的好处就是方便放置,放哪里都行,因为不占空间。二、一体机电脑的弊端由于一体机电脑把传统的机箱内的所有设备和显示屏,都合为一体了,可见..._企业版一体机与普通一体机的区别

随便推点

ble芯片 全称_一文看懂BLE芯片竞争格局-程序员宅基地

文章浏览阅读1.4k次。无线通信技术主要分广域网和局域网两种,差别在传输距离和通信协议方面。局域网无线通信技术包括NFC、IrDA、WIFI、蓝牙、ZigBee、Z-Wave、UWB、RFID、LiFi等,传输一般在0-300米;广域网无线通信技术包括GPRS、LoRa、NB-IoT等,有效传输距离在公里级。蓝牙是最主要的局域网(短距离)无线通信方式之一,适合覆盖距离在百米以内、数据传输量较小的通信。蓝牙实现功耗、成本、..._ble soc芯片跟纯ble

台大李宏毅《机器学习》2021课程撒花完结!除了视频、PPT,还有人汇编了一本答疑书...-程序员宅基地

文章浏览阅读530次。点击 机器学习算法与Python学习 ,选择加星标精彩内容不迷路机器之心报道今年 2 月末,「精灵宝可梦大师」李宏毅的《机器学习》最新一期课程正式开课。对于想要入门机器学习的同学来说,这是..._李宏毅ppt机器学习书

YOLOv5(ultralytics) 训练自己的数据集,VOC2007为例_ultralytics能训练sam吗-程序员宅基地

文章浏览阅读3.8k次,点赞4次,收藏40次。官方教程:https://github.com/ultralytics/yolov5/wiki/Train-Custom-DataVOC格式数据1.在yolov5目录下创建VOC2007文件夹,有VOC2007 …Annotations # 存放图片对应的xml文件 …JPEGImages # 存放图片 …ImageSets/Main #之后会在Main文件夹内自动生成train.txt,val.txt,test.txt和trainval.txt四个文件,存放训练集、验证集、测试集图片的名_ultralytics能训练sam吗

单词薄-java程序设计课程-成功-derby安装_apache derby安装-程序员宅基地

文章浏览阅读619次,点赞2次,收藏6次。http://www.mamicode.com/info-detail-1597112.html一、首先按照这个网址,干了一遍。下载了derby。设置了环境变量和系统变量。————————————————————————————1,首先下载Derbyhttp://db.apache.org/derby/derby_downloads.html技术分享下载最新版本 db-derb..._apache derby安装

GameFramework框架详解之 框架总览_gameformwork讲解-程序员宅基地

文章浏览阅读1.5w次,点赞23次,收藏73次。一.前言目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩_gameformwork讲解

分布式之数据库和缓存双写一致性方案解析_java 延时双写-程序员宅基地

文章浏览阅读126次。为什么写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Sp..._java 延时双写

推荐文章

热门文章

相关标签