前言:

之前在课本上和csdn看到了这个爬取大学排名的案例,但照着案例打出的程序一直报错,后来一步一步根据网上资料分析程序后,不断改错后,终于实现了这个程序的编写。

一、程序展示

import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

def fillUnivLIst(ulist, html):
    soup = bs4.BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        #检测tag类型,过滤非tag类型标签
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()])
    return ulist

def printUnivList(ulist, num):
    #tplt = "{0:^10}\t{1:{3}^6}\t{2:^10}"
    print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
#     print(tplt.format("排名","学校名称","总分",chr=(12288)))
    for i in range(num):
        u=ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
#         print(tplt.format(u[0],u[1],u[2],chr=(12288)))
    
def main():
    ulist = []
    url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
    html = getHTMLText(url)
    ulist = fillUnivLIst(ulist, html)
    printUnivList(ulist, 20)
    
    
main()

二、运行结果展示

 

PS F:\pyptc>  & 'D:\python\python.exe' 'c:\Users\Lenovo\.vscode\extensions\ms-python.python-2021.9.1246542782\pythonFiles\lib\python\debugpy\launcher' '55760' '--' 'f:\pyptc\chongxin.py'
    排名         学校名称           总分    
<div class="ranking top1" data-v-68e330ae="">
                            1
                        </div>  清华大学          852.5   
<div class="ranking top2" data-v-68e330ae="">
                            2
                        </div>  北京大学          746.7   
<div class="ranking top3" data-v-68e330ae="">
                            3
                        </div>  浙江大学          649.2   
<div class="ranking" data-v-68e330ae="">
                            4
                        </div>  上海交通大学      625.9   
<div class="ranking" data-v-68e330ae="">
                            5
                        </div>  南京大学          566.1
<div class="ranking" data-v-68e330ae="">
                            6
                        </div>  复旦大学          556.7
<div class="ranking" data-v-68e330ae="">
                            7
                        </div>  中国科学技术大学          526.4
<div class="ranking" data-v-68e330ae="">
                            8
                        </div>  华中科技大学      497.7
<div class="ranking" data-v-68e330ae="">
                            9
                        </div>  武汉大学          488.0
<div class="ranking" data-v-68e330ae="">
                            10
                        </div>  中山大学          457.2
<div class="ranking" data-v-68e330ae="">
                            11
                        </div>  西安交通大学      452.5
<div class="ranking" data-v-68e330ae="">
                            12
                        </div>  哈尔滨工业大学    450.2
<div class="ranking" data-v-68e330ae="">
                            13
                        </div>  北京航空航天大学          445.1
<div class="ranking" data-v-68e330ae="">
                            14
                        </div>  北京师范大学      440.9
<div class="ranking" data-v-68e330ae="">
                            15
                        </div>  同济大学          439.0
<div class="ranking" data-v-68e330ae="">
                            16
                        </div>  四川大学          435.7
<div class="ranking" data-v-68e330ae="">
                            17
                        </div>  东南大学          432.7
<div class="ranking" data-v-68e330ae="">
                            18
                        </div>  中国人民大学      409.7
<div class="ranking" data-v-68e330ae="">
                            19
                        </div>  南开大学          402.1
<div class="ranking" data-v-68e330ae="">
                            20
                        </div>  北京理工大学      395.6

三、程序实现需要的几个函数库

requests和 bs4

其中requests库用来爬取网页内容,使用beautifulsoup4库分析网页中的数据,提取学校排名并且打印出来。

首先这两个库是要提前下载的:

需要我们使用cmd进入到我们python下载所在的文件中的Scripts文件中,输入下列指令下载即可

pip install requests
pip install beautifulsoup4

 

四、程序分析

简单分析一下这个程序,其实相对简单,主要由以下这几个主要的函数组成,

1.def getHTMLText(url):

(1).try.....except语句

这里用到了try except语句,其实这个语句的实现和if else差不多,一般使用其实现异常处理机制从而控制用户输入的常用方法。

 try:
    <语句>
except <name>:
    <语句>          #如果在try部份引发了名为'name'的异常,则执行这段代码
else:
    <语句>          #如果没有异常发生,则执行这段代码

(2)res = requests.get(url,headers=headers)  

向网站发起请求,并获取响应对象

参数

  • url :需要抓取的URL地址
  • headers : 请求头
  • timeout : 超时时间,超过时间会抛出异常

响应对象(res)属性

  • encoding :响应字符编码 res.encoding = 'utf-8'
  • text :字符串 网站源码
  • content :字节流 字符串网站源码
  • status_code :HTTP响应码
  • url :实际数据的URL地址

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐