Mooc爬取排名前20大学(2024年)

我最近跟着mooc学习爬虫,在做到这个项目的时候发现输出为None,因为看教学视频是16左右发布的,我不知道是不是原本的html框架是不是有变动,所以我干脆自己写

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
url = "http://www.shanghairanking.cn/rankings/bcur/2024"
r = requests.get(url)
r.encoding = r.apparent_encoding

# 解析HTML
soup = BeautifulSoup(r.text, 'html.parser')

# 初始化列表来存储数据
data = []

# 遍历表格中的每一行
for td in soup.find_all('td'):
    data.append(td.text.strip())

print(data[0])
print(data[1])
print(data[2])

这是我的第一种方法,因为观察源代码可以发现大部分数据都在td标签中,所以直接找到所有td标签的文本内容,但是在输出学校名字时候会有问题出现

学校的英译和双一流之类的数据不是我需要的,所以此方法可能不可行

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
url = "http://www.shanghairanking.cn/rankings/bcur/2024"
r = requests.get(url)
r.encoding = r.apparent_encoding

# 解析HTML
soup = BeautifulSoup(r.text, 'html.parser')

# 初始化列表来存储数据
data = []

# 遍历表格中的每一行
for tr in soup.find_all('tr'):  # 找到所有的<tr>标签
    tds = tr.find_all('td')  # 找到每一行中的所有<td>标签

    # 确保每个<tr>标签下有足够的<td>标签来包含所有的数据(因为我们要找6个数据)
    if len(tds) >= 6:
        # 提取排名
        rank = tds[0].find('div', class_='ranking').text.strip()
        # 提取大学名称
        univ_name = tds[1].find('span', class_='name-cn').text.strip()
        # 提取省份
        province = tds[2].text.strip()
        # 提取类型
        category = tds[3].text.strip()
        # 提取总分
        score = tds[4].text.strip()
        # 提取其他分数
        other_score = tds[5].text.strip()

        # 将所有数据添加到列表中
        data.append([rank, univ_name, province, category, score, other_score])

    # 打印或存储数据
print(f"排名\t{chr(12288)}学校名称\t\t\t\t\t{chr(12288)}省份\t\t\t\t\t{chr(12288)}类型\t\t\t\t\t{chr(12288)}总分\t\t\t{chr(12288)}其他分数")
for rank, univ_name, province, category, score, other_score in data:
    print(f"{rank}\t{chr(12288)}{univ_name.ljust(20)}\t{chr(12288)}{province.ljust(20)}\t{chr(12288)}{category.ljust(20)}\t{chr(12288)}{score.ljust(10)}\t{chr(12288)}{other_score.ljust(10)}")


"chr(1288)产生中文空格,ljust向左填充"

然后就是正常逻辑通过标签查找的方法,但是在输出的时候可能不够简洁,因为我把所有数据都给搜集起来并且它们的输出非常美观

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值