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

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. 需求

获取该网页的排行信息
学习笔记:中国大学排名定向爬虫_第1张图片

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

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

学习笔记:中国大学排名定向爬虫_第2张图片

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



	
		
1
北京 综合 969.2 37.9

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

你可能感兴趣的:(Python基础,爬虫,数据挖掘,python)