Python爬取中国最好大学排行榜报错TypeError: unsupported format string passed to NoneType.__format__

简介: Python爬取中国最好大学排行榜报错TypeError: unsupported format string passed to NoneType.__format__


本文使用的是如下网址:

http://gaokao.xdf.cn/201911/10991728.html

1 问题分析与解决

报错为类型错误,显示我们传递了不支持的格式字符串

1.1 strip()

请添加链接描述
我们查看网页源码,发现我们所传递的字符串头尾包含空格及换行(红色方框),但是这不是报错的原因,这只会导致格式不太好看,因此我在获取字符串是添加了.strip()函数,既tds[0].text.strip()。
strip()函数可去除头尾的指定字符,默认为空格及换行。

1.2 string与text

r.text                           #响应内容的字符串形式,即url对应页面的内容
r.string                        #标签内非属性字符串,<>...<>中字符串,格式:.string

通过对比我们可以发现r.string获取的是标签内非属性字符串,而我们查看源代码可以发现大学名字不是td标签的字符串,属于td儿子的儿子的儿子……的字符串,因此tds[0].string只能获取到None。

所以应该使用r.text获取,即tds[1].text.strip()

 ulist.append([tds[0].text.strip(), tds[1].text.strip(), tds[3].text.strip()])       

2 爬取结果

排名    .   学校名称       .    总分    
1         .   清华大学       .   北京市    
2         .   北京大学       .   北京市    
3         .   浙江大学       .   浙江省    
4         .  上海交通大学      .   上海市    
5         .   复旦大学       .   上海市    
6         .   南京大学       .   江苏省    
7         . 中国科学技术大学     .   安徽省    
8         . 哈尔滨工业大学      .   黑龙江省   
9         .  华中科技大学      .   湖北省    
10        .   中山大学       .   广东省    
11        .   东南大学       .   江苏省    
12        .   天津大学       .   天津市    
13        .   同济大学       .   上海市    
14        . 北京航空航天大学     .   北京市    
15        .   四川大学       .   四川省    
16        .   武汉大学       .   湖北省    
17        .  西安交通大学      .   陕西省    
18        .   南开大学       .   天津市    
19        .  大连理工大学      .   辽宁省    
20        .   山东大学       .   山东省   

3 源码显示

import requests
from bs4 import BeautifulSoup
import bs4

#获取url内容
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(ulist, html):
    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].text.strip(), tds[1].text.strip(), tds[3].text.strip()])       #.strip()去除头尾空格、换行

#格式化输出
def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名", "学校名称", "总分", chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))

#主函数
def main():
    uinfo = []
    url = 'http://gaokao.xdf.cn/201911/10991728.html'
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)  # 20 univs


main()

相关文章
|
2月前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
75 0
|
1月前
|
Ubuntu Python
【Python】报错ModuleNotFoundError: No module named ‘XXX‘
【Python】报错ModuleNotFoundError: No module named ‘XXX‘
|
4天前
|
监控 开发者 Python
Python中记录程序报错信息的实践指南
Python中记录程序报错信息的实践指南
12 1
|
10天前
|
数据采集 Web App开发 iOS开发
爬取B站评论:Python技术实现详解
爬取B站评论:Python技术实现详解
|
11天前
|
消息中间件 数据采集 SQL
DataWorks操作报错合集之通过dataworks把表数据发送到kafka,表字段全是string类型如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 2
|
12天前
|
C++ Python
python安装HLL报错unable to find vcvarsall.bat
通过上述方法之一,你应该能够解决"unable to find vcvarsall.bat"的错误,并成功安装HLL或其他需要编译的Python扩展。确保在安装之前先安装了Visual C++构建工具。
10 0
|
13天前
|
弹性计算 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之阿里函数计算中出现'python app.py'的错误如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
24 3
|
21天前
|
数据采集 Web App开发 开发者
探秘Python爬虫技术:王者荣耀英雄图片爬取
探秘Python爬虫技术:王者荣耀英雄图片爬取
|
24天前
|
API 开发工具 开发者
PYTHON运行阿里云的短信发送程序报错
图片链接指向一个阿里云开发者生态的图片,内容可能显示了一个关于使用Python SDK调用API发送短信时遇到的错误。错误可能涉及主账号和子账号ID。问题可能是由于缺少环境变量配置导致的。代码基于Python 2.0版本。总结:SDK调用出错,疑因环境变量未配置,影响了账号ID的识别。
|
24天前
|
Python
IDA3.12版本的python,依旧报错IDAPython: error executing init.py.No module named ‘impRefer to the message win
IDA3.12版本的python,依旧报错IDAPython: error executing init.py.No module named ‘impRefer to the message win