python爬虫小案例_中国大学排名(2021.04.11)

加上这一篇,我已经有三篇都是写 ”中国大学排名的爬取“小案例了,那我为什么又写一遍呢?还不是之前的代码不能成功爬取数据了。

那我怎么知道的呢?有网友反馈说,运行代码返回 None

我运行了一下,还真是:


可参考下列步骤,可以成功爬取到你想要的数据

1、进入 网址 ,可参考的下面的步骤,找到这些信息存储的地方:

2、在浏览器输入网址 :https://www.shanghairanking.cn/api/pub/v1/bcur?bcur_type=11&year=2020

3、找出我们需要的信息,以 清华大学为例子

4、接下来就是开写代码了,可参考下面的代码:

import json
import requests
 
def getHTMLText(url):
    '''从网络上获取大学排名网页内容'''
    try:
        r = requests.get(url, timeout=40) 
        # #如果状态不是200,就会引发HTTPError异常
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
 
def printUnivList(ulist, html,num):
    '''提取 html 网页内容中 前 num 名大学信息到 ulist列表中  '''   
    data = json.loads(html) #对数据进行解码    
    # 提取 数据 rankings 包含的内容
    content = data['data']['rankings']    

    # 把 学校的相关信息放到  ulist 里面
    for i in range(num):
        index = content[i]['rankOverall']
        name  = content[i]['univNameCn']
        score = content[i]['score']
        category  = content[i]['univCategory']
        ulist.append([index, name, score,category])        

    # 打印前 num 名的大学      
    tplt ="{0:^10}\t{1:{3}^10}\t{2:^10}\t{4:^10}"   # {1:{3}^10} 中的 {3} 代表取第三个参数
    print(tplt.format("排名 ","学校名称","总分",chr(12288),"类型")) # chr(12288) 代表中文空格
    for i in range(num):
        u=ulist[i]        
        print(tplt.format(u[0],u[1],u[2],chr(12288),u[3])) # chr(12288) 代表中文空格 
 
def main():
    uinfo = []     
    url = 'https://www.shanghairanking.cn/api/pub/v1/bcur?bcur_type=11&year=2020'
    html = getHTMLText(url)# 获取大学排名内容
    printUnivList(uinfo, html, 30)#输出 排名前30 的大学内容 
 
main()

5、运行以上代码,就可以爬取到我么想要的内容了

本文若有不妥的地方,望指出,谢谢。

评论 26 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

不知缘由

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值