鱼C论坛

 找回密码
 立即注册
查看: 2246|回复: 5

[作品展示] 中国大学排名爬取(以2016为例)

[复制链接]
发表于 2024-2-19 17:30:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yinda_peng 于 2024-2-19 17:33 编辑

此案例来源于【中国大学MOOC】,或者见【哔哩哔哩网课】,bilibili在P29开始,我发现这个案例由于原url链接变化已导致失效,是以在原课程示例代码的基础上自行修改,以实现功能。

不废话,url:https://www.shanghairanking.cn/rankings/bcur/201611

代码:

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd

def getHTMLText(url):
    try:
        r = requests.get(url)
        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('div')
            td = tr('td')
            ulist.append([tds[0].string[29:-25],tds[-1].string[:-13],td[-2].string[25:-2]])


def main():
    uinfo = []
    url = "https://www.shanghairanking.cn/rankings/bcur/201611"
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    df = pd.DataFrame(uinfo, columns=["排名", "学校名称", "总分"])
    writer = pd.ExcelWriter('C:/Users/Lenovo/Desktop/university_ranking.xlsx', engine='xlsxwriter')
    df.to_excel(writer, index=False)
    writer.close()
    print('已将数据保存到指定路径的Excel文件中')

main()

自己运行的时候记得修改路径,在main函数witer = pd.ExcelWriter("……")那一行,我运行得到的结果如下(貌似没法上传xlsx附件?):

QQ截图20240219172847.png


评分

参与人数 3荣誉 +12 鱼币 +8 贡献 +6 收起 理由
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^
liuhongrun2022 + 5 + 3
学习编程中的Ben + 5 + 5 无条件支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-19 17:31:27 | 显示全部楼层
代码本身是正确的,只是填充数据的时候有一些小问题。根据你给出的代码,我稍微修改了一下可以得到正确的结果。

首先,修改 `fillUnivList` 函数,将取值的方式修改为 `.text` 而不是 `.string`。
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('div')
            td = tr('td')
            ulist.append([tds[0].text, tds[1].text, td[0].text])

然后,修改 `pd.DataFrame` 生成 DataFrame 时的列名,目前写成了空的,修改为 `['排名', '学校名称', '总分']`。
df = pd.DataFrame(uinfo, columns=['排名', '学校名称', '总分'])

最后,将 `.to_excel` 的路径改为自己本地合适的路径即可。代码运行后会在指定路径生成一个 `university_ranking.xlsx` 文件。

注:由于数据量较大,可能要等待一段时间才能成功保存。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-19 17:38:05 | 显示全部楼层
支持!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-2-19 18:02:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-19 23:22:22 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-20 09:16:55 | 显示全部楼层
有意思,如何爬取公网上最新的大学数据也是有趣的课题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表