写点什么

爬虫实例:爬取中国大学排名 Top20

用户头像
Bob
关注
发布于: 2021 年 04 月 16 日
爬虫实例:爬取中国大学排名Top20

每日一句:世界上没有一条道路是重复的,也没有一个人生是能够替代的。——余华《活着》


在学习对 HTML 页面信息的提取后,下面以实例来学习爬取网页。


首先找到需要爬取的网页:https://www.shanghairanking.cn/,再验证 robots 协议,如下:https://www.shanghairanking.cn/robots.txt



可以看到该网站并未对爬虫做出相关限制。


对大学排名网页爬取的要求为:

1.输入:大学排名 URL 链接。

2.输出:大学排名信息的输出(排名,大学名称,总分)。

3.技术路线:Requests+bs4。

4.定向爬虫:仅对输入 URL 进行爬取,不扩展爬取。


简单步骤:

1.从网络上获得大学排名的网页内容。

2.提取网页内容中信息到合适的数据结构。

3.利用数据结构展示并输出结果。


其中,最重要的便是在网页的代码中找到相关的标签并且进行分析,比如下图中,我们首先用快捷键 Ctrl+F 查找某个大学的名字,这里小编查找的是清华大学,按 Enter 键后会自动搜索到相关位置。找到大学名称后,在对相关标签进行分析,比如与大学名称相关的标签为 a,与大学地址相关的标签为 td 标签,再向上找到某一所大学信息相关的标签,即 tr,在 tr 标签内,包含了清华大学相关的所有内容;再向上找到包含所有学校信息的标签,即 tbody 标签。



实例源代码:


import requestsfrom bs4 import BeautifulSoupimport bs4def getThmltext(url):#获取网页内容    try:        r=requests.get(url,timeout=30)        r.raise_for_status()        r.encoding=r.apparent_encoding#修改编码        return r.text    except:        return ""
def fillUnivlist(info,html):#查找相关信息 soup=BeautifulSoup(html,"html.parser") for tr in soup.find('tbody').children: if isinstance(tr,bs4.element.Tag): tds=tr('td') info.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()]) return info
def printUnivlist(info,num):#打印相关数据 print("{:^10}\t{:^6}\t{:^10}".format("排名","学校","总分")) for i in range(num): u=info[i] print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main(): info=[] url='https://www.shanghairanking.cn/rankings/bcur/2020' html=getThmltext(url) info=fillUnivlist(info,html) printUnivlist(info,20)#20个学校信息main()
复制代码


运行结果:



发布于: 2021 年 04 月 16 日阅读数: 29
用户头像

Bob

关注

潜心修炼~ 2021.03.22 加入

大二计科在读,忠于热爱~

评论

发布
暂无评论
爬虫实例:爬取中国大学排名Top20