中国大学Mooc《Python网络爬虫与信息提取》

您所在的位置:网站首页 中国大学图标定向爬虫 中国大学Mooc《Python网络爬虫与信息提取》

中国大学Mooc《Python网络爬虫与信息提取》

2024-07-14 18:44| 来源: 网络整理| 查看: 265

在学习嵩天老师的课程《Python网络爬虫与信息提取》过程中,运行了一下“中国大学排名定向爬虫”的原代码,其中fillUnivList()函数代码如下:

def fillUnivList(html): ulist=[] soup = BeautifulSoup(html, "html.parser") for tr in soup.find('tbody').children: if isinstance(tr, bs4.element.Tag): tds = tr('td') ulist.append([tds[0].string.strip(), tds[1].string.strip(), tds[4].string.strip()]) return ulist

出现了错误提示:

unsupported format string passed to NoneType.__format__

出现以上错误提示的原因在于,fillUnivList()函数在获取大学名称时得到的是空值None,无法打印输出。根据该错误提示,解决步骤如下: 首先在网页上按下快捷键fn+f12,查看网页源代码,如图所示,“大学名称”字符串在标签的子标签标签中,仅仅通过标签无法获取“大学名称”字符串,必须通过标签获取“大学名称”字符串。

在这里插入图片描述 观察网页源代码,可以发现标签树的结构为: 在这里插入图片描述 从图中可以发现,“清华大学”字符串在标签对...之间,我们在提取“清华大学”字符串时,需要从标签下行遍历,找到标签,再找到标签,再找到标签,从而获取“清华大学”字符串,代码如下:

def fillUnivList(html): ulist=[] #定义一个空表 soup = BeautifulSoup(html, "html.parser") for tr in soup.find('tbody').children: #从标签下行遍历其子标签 if isinstance(tr, bs4.element.Tag): #排除非标签的tr字段 tds = tr('td') #找到标签下的标签键值对,赋予tds sn = tr('a')[0] #找到标签下的标签键值对,赋予sn ulist.append([tds[0].string.strip(), sn.string, tds[4].string.strip()]) #将获取的信息输入列表ulist中,.strip函数可以去除空格和回车 return ulist

总体代码如下:

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(html): ulist=[] #定义一个空表 soup = BeautifulSoup(html, "html.parser") for tr in soup.find('tbody').children: #从标签下行遍历其子标签 if isinstance(tr, bs4.element.Tag): tds = tr('td') #找到标签下的标签键值对,赋予tds sn = tr('a')[0] #找到标签下的标签键值对,赋予sn ulist.append([tds[0].string.strip(), sn.string, tds[4].string.strip()]) #将获取的信息输入列表ulist中,.strip函数可以去除空格和回车 return ulist def printUnivList(ulist, num): print("{:^10}\t{:^6}\t{:^10}".format("排名", "大学名称", "总分")) for i in range(num): u = ulist[i] print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2])) def main(): url = 'http://www.shanghairanking.cn/rankings/bcur/2020' html = getHTMLText(url) uinfo=fillUnivList(html) printUnivList(uinfo, 60) main()

运行结果如下:

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3