【python爬虫入门练习】爬取中国大学排名前八百名


前言

本篇内容是一个Python爬虫小练习:基于requests和BeautifulSoup功能库获取中国大学排名相关信息。

网站链接:

 https://www.dxsbb.com/news/5463.html

提示:以下是本篇文章正文内容,下面案例可供参考

一、Requests库和BeautifulSoup库

Requests库是在 urllib 的基础上开发而来,它使用 Python 语言编写,并且采用了 Apache2 Licensed(一种开源协议)的 HTTP 库。Requests 库使用方便、快捷,因此在编写爬虫程序时 ,Requests 库使用较多。

BeautifulSoup库提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

二、使用步骤

1.引入功能库

代码如下(示例):

import requests
from bs4 import BeautifulSoup

需要使用requests和BeautifulSoup功能库,可以在终端通过清华大学镜像快速下载

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install Beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.完整代码

代码如下(示例):

import requests
from bs4 import BeautifulSoup

# 发起HTTP请求获取HTML内容
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)  # 使用requests库发起GET请求,设置超时时间为30秒
        r.raise_for_status()  # 如果HTTP请求不成功,抛出异常
        r.encoding = r.apparent_encoding  # 根据HTTP响应内容分析编码方式并设置
        return r.text  # 返回获取的HTML文本内容
    except:
        return ""  # 发生异常返回空字符串

# 解析HTML并填充数据到列表
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, 'html.parser')  # 使用BeautifulSoup解析HTML
    for tr in soup.find('tbody').find_all('tr')[1:]:  # 查找tbody标签下的所有tr标签,跳过第一个tr(表头)
        tds = tr.find_all('td')  # 查找每行中的所有td标签
        ulist.append([tds[0].string, tds[1].string, tds[2].string])  # 将排名、学校名称、总分信息存入ulist列表中

# 打印排名前num的学校信息
def printUnivList(ulist, num):
    print("{:^10}\t{:^10}\t{:^10}".format("排名", "学校名称", "总分", chr(12288)))  # 打印表头,使用chr(12288)添加中文空格
    for i in range(num):
        u = ulist[i]  # 获取第i个学校的信息
        if None not in u:  # 检查信息是否完整
            print("{:^10}\t{:^10}\t{:^10}".format(u[0], u[1], u[2]))  # 格式化打印排名、学校名称、总分
        else:
            print("数据缺失")  # 如果信息不完整则打印数据缺失

unifo = []  # 创建空列表用于存储学校信息
url = 'https://www.dxsbb.com/news/5463.html'  # 目标网页URL
html = getHTMLText(url)  # 获取网页HTML内容
fillUnivList(unifo, html)  # 解析HTML并将学校信息填充到unifo列表中
printUnivList(unifo, 800)  # 打印前800所学校的信息

三、相关优化问题

1.数据缺失


在这里插入图片描述

观察运行结果可以发现个别数据缺失的现象,这时候我们可以到对应网站查看对应情况:

进入网页开发者模式检查可以发现缺失数据,例:北京师范大学的标签td中含有a标签,这导致分隔数据而不完整。
解决办法:可以在printUnivList中借助if-else分支处理这种异常数据情况。
在这里插入图片描述

2.数据格式

观察运行结果可见:某些校名过长的学校排名格式存在一些错位现象。
解决方法:可以在printUnivList方法中改变一下打印格式来解决这种问题。

总结

以上就是本次分享的全部内容,本文是Python爬虫入门的一个小练习,代码还有很多优化空间,各位小伙伴可以自己动手试一试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值