中国大学哪家强? —— Python爬虫beautifulsoup4库实战

中国大学排名定向爬虫

此处以最好大学网为例!

在这里插入图片描述
由于还没有学习正则表达式,故此处我们的需求只需要输出中国大学排名和学校名称即可。

第一步,先进入中国大学网,找到大学排名的url,分析我们所需要的内容在其网页中对应的位置,方便查找。

在这里插入图片描述

第二步,写好整个程序的框架,方便后期对内容的填充,待定的可以用pass占位。

第三步,编写代码,调试代码,所需要讲解的都写在代码注释中了,如下。

import requests
from bs4 import BeautifulSoup


# 获取一个页面的内容 并且返回该内容
def getHTMLText(url, headers):
    try:
        r = requests.get(url, timeout=30)
        # 如果不是200 产生异常requests.HTTPError
        r.raise_for_status()
        # r.encoding是根据header猜测的编码格式  r.apparent_encoding是根据内容得出的编码格式(更为准确)
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


# 将一个页面的内容放入到一个列表中
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, 'html.parser')
    # 找class属性等于name-cn的a标签 应该使用class_ 而不是class 因为class是关键字 此处注意
    for a in soup.find_all('a', class_="name-cn"):
        # 测试输出
        # print(a.string)
        # a.string表示标签中的字符串 将其追加到列表中
        ulist.append(a.string)


# 将列表中的信息打印出来
def printUnivList(ulist):
    for i in ulist:
        # 此处使用格式化字符串 %-6d表示占六位 左对齐 ulist.index(i) + 1表示其在列表中的下标+1 正好表示排名
        print("%-6d%s" % (ulist.index(i) + 1, i))


# 主函数
def main():
    # 定义一个空列表 将大学信息放在列表中
    uinfo = []
    url = 'https://www.shanghairanking.cn/rankings/bcur/2021'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }
    html = getHTMLText(url, headers)
    fillUnivList(uinfo, html)
    printUnivList(uinfo)


main()

输出结果如下:

1     清华大学 
2     北京大学 
3     浙江大学 
4     上海交通大学 
5     南京大学 
6     复旦大学 
7     中国科学技术大学 
8     华中科技大学 
9     武汉大学 
10    西安交通大学 
11    哈尔滨工业大学 
12    中山大学 
13    北京师范大学 
14    四川大学 
15    北京航空航天大学 
16    同济大学 
17    东南大学 
18    中国人民大学 
19    北京理工大学 
20    南开大学 
21    山东大学 
22    天津大学 
23    中南大学 
24    吉林大学 
25    西北工业大学 
26    厦门大学 
27    华南理工大学 
28    大连理工大学 
29    华东师范大学 
30    中国农业大学 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值