yinda_peng 发表于 2024-2-19 17:30:57

中国大学排名爬取(以2016为例)

本帖最后由 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(.string,tds[-1].string[:-13],td[-2].string])


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附件?):

FishC 发表于 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(.text, tds.text, td.text])

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

df = pd.DataFrame(uinfo, columns=['排名', '学校名称', '总分'])

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

学习编程中的Ben 发表于 2024-2-19 17:38:05

支持!

yinda_peng 发表于 2024-2-19 18:02:37

学习编程中的Ben 发表于 2024-2-19 17:38
支持!

{:10_254:}{:10_275:}

liuhongrun2022 发表于 2024-2-19 23:22:22

支持

不二如是 发表于 2024-2-20 09:16:55

{:10_256:}{:10_256:}{:10_256:}有意思,如何爬取公网上最新的大学数据也是有趣的课题
页: [1]
查看完整版本: 中国大学排名爬取(以2016为例)