爬虫(5)—— 获取中国大学排名

爬虫案例视频讲解:
视频教学

功能描述:
输入:大学排名url链接
输出:大学排名信息的屏幕输出(排名、大学、总分)
技术路线:requests、bs4
定向爬虫:仅对输入url进行爬取,不扩展爬取

程序结构设计
步骤1:从网络上获取大学排名网页内容
getHTMLText()

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''

步骤2:提取网页内容中信息到合适的数据结构
finallUnivList()
该步骤是整个案例中的核心
在这里插入图片描述
分析:
1、从图片中可以看到关于大学排名的内容都存在于<tbody>标签中,所以先获取<tbody>标
2、每一所大学又都存在于<tr>标签中的<td>标签中,然后再获取<td>标签
3、将非标签内容过滤掉
大体意思就是这样,详细分析再视频中

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, 'html.parser')
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):    # 过滤掉非标签的信息
            tds = tr.find_all('td')
            ulist.append([tds[0].string, tds[1].string, tds[2].string])

步骤3:利用数据结构展示并输出结果
printUnivList()

def printUnivList(ulist, num):
    # 打印表头,并处理中英文对齐问题
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))
    # 输出具体信息
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], chr(12288)))

完整代码

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 = BeautifulSoup(html, 'html.parser')
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):    # 过滤掉非标签的信息
            tds = tr.find_all('td')
            ulist.append([tds[0].string, tds[1].string, tds[2].string])


def printUnivList(ulist, num):
    # 打印表头,并处理中英文对齐问题
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))
    # 输出具体信息
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], chr(12288)))


def main():
    uinfo = []          # 存放大学信息
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20)  # 输出排名前20的学习信息


main()

中英文对齐问题
点此查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值