拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 学习笔记:中国大学排名定向爬虫

学习笔记:中国大学排名定向爬虫

白鹭 - 2022-02-10 1962 0 0

1. 学习视频

中国大学排名定向爬虫:

  • https://www.bilibili.com/video/BV1pt41137qK?p=33&spm_id_from=pageDriver

2. 程序设计

输入:https://www.shanghairanking.cn/rankings/bcur/2021
输出:大学排名信息的打印(排名、大学名称、总分)
技术路线:requests-bs4
定向爬虫:仅对输入URL进行爬取,不拓展爬取

  1. 从网络上获取大学排名网页内容
  2. 提取网页内容中资讯到合适的资料结构
  3. 利用资料结构展开并输出结果

3. 需求

获取该网页的排行信息
在这里插入图片描述

4. 网页源代码查看大学信息的节点

先找到 tbody 标签,获取所有大学
再找到 tr 标签,获取具体大学
最后找到 td,获取大学详情

在这里插入图片描述

先找到 tbody 标签,获取所有大学
再找到 tr 标签,获取具体大学
最后找到 td,获取大学详情

<tbody data-v-6885f26d>
<tr data-v-6885f26d>
	<td data-v-6885f26d>
		<div class="ranking top1" data-v-6885f26d>1</div>
	</td>
	<td class="align-left" data-v-6885f26d>
		<div class="univname-container" data-v-6885f26d>
		<div class="logo" data-v-6885f26d>
			<img alt="清华大学" one rror='this.src="/images/blank.svg"' src="https://www.shanghairanking.cn/_uni/logo/27532357.png" class="univ-logo" data-v-6885f26d>
		</div> 
		<div class="univname" data-v-6885f26d>
			<div data-v-b80b4d60 data-v-6885f26d>
				<div class="tooltip" data-v-b80b4d60>
				<div class="link-container" data-v-b80b4d60>
					<a 
						href="/institution/tsinghua-university" class="name-cn" data-v-b80b4d60>清华大学 
					</a> 
					<div 
						class="collection" style="display:none" data-v-b80b4d60><img src="/_nuxt/img/uncollection.5e124aa.svg" alt data-v-b80b4d60>
					</div>
				</div>
			</div>
		</div> 
		<div data-v-f9104fdc data-v-6885f26d>
			<div class="tooltip" data-v-f9104fdc>
				<div class="link-container" data-v-f9104fdc>
					<a 
						href="/institution/tsinghua-university" class="name-en" data-v-f9104fdc>Tsinghua University 
					</a>
				</div> 
			</div>
		</div>
	</td>
	<td data-v-6885f26d>北京</td>
	<td data-v-6885f26d>综合</td>
	<td data-v-6885f26d>969.2</td>
	<td data-v-6885f26d>37.9</td>
</tr>

5. 代码示例

import requests
from bs4 import BeautifulSoup
import bs4

"""
中国大学排名定向爬虫:https://www.bilibili.com/video/BV1pt41137qK?p=33&spm_id_from=pageDriver
输入:https://www.shanghairanking.cn/rankings/bcur/2021
输出:大学排名信息的打印(排名、大学名称、总分)
技术路线:requests-bs4
定向爬虫:仅对输入URL进行爬取,不拓展爬取

程序设计
1. 从网络上获取大学排名网页内容
2. 提取网页内容中资讯到合适的资料结构
3. 利用资料结构展开并输出结果
"""

def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
    return ""

# 提取HTML关键信息,决议出大学名称,排名,分数
def fillUnivList(list, html):
    soup = BeautifulSoup(html, "html.parser")
    # 1. 先找到 tbody 标签,获取所有大学
    for tr in soup.find('tbody').children:
        # 2. 再找到 tr 标签,获取具体大学
        if isinstance(tr, bs4.element.Tag):
            # 3. 最后找到 td,获取大学详情
            tds = tr('td')
            uRank = tds[0].string.replace('\n', "").strip() # 去除换行符和空格
            uName = tds[1].div.a.string.replace('\n', "").strip()
            uScore = tds[4].string.replace('\n', "").strip()
            list.append([uRank, uName, uScore])

def printList(list, num):
    mFormat = "{0:^10}\t{1:^10}\t{2:^15}"
    print(mFormat.format("排名", "学校名称", "总分"), chr(12288))
    for i in range(num):
        info = list[i]
        print(mFormat.format(info[0], info[1], info[2]), chr(12288))

if __name__ == '__main__':
    list = []
    url = "https://www.shanghairanking.cn/rankings/bcur/2021"
    html = getHTMLText(url)
    fillUnivList(list, html)
    # 列出20所大学的排名信息
    printList(list, 20)

6. 运行结果

对照结果和网页的实际显示,查看结果为一致

C:\Users\珞落\AppData\Local\Programs\Python\Python39\python.exe D:/PythonProject/main.py
    排名    	   学校名称   	      总分         
    1     	   清华大学   	     969.2       
    2     	   北京大学   	     855.3       
    3     	   浙江大学   	     768.7       
    4     	  上海交通大学  	     723.4       
    5     	   南京大学   	     654.8       
    6     	   复旦大学   	     649.7       
    7     	 中国科学技术大学 	      577        
    8     	  华中科技大学  	     574.3       
    9     	   武汉大学   	     567.9       
    10    	  西安交通大学  	     537.9       
    11    	 哈尔滨工业大学  	     522.6       
    12    	   中山大学   	     519.3       
    13    	  北京师范大学  	     518.3       
    14    	   四川大学   	     516.6       
    15    	 北京航空航天大学 	     513.8       
    16    	   同济大学   	     508.3       
    17    	   东南大学   	     488.1       
    18    	  中国人民大学  	     487.8       
    19    	  北京理工大学  	      474        
    20    	   南开大学   	     465.3       

Process finished with exit code 0

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *