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()

相关文章
|
3月前
|
存储 Java 索引
Python String详解!
本文详细介绍了Python中的字符串数据类型,包括其创建、访问、切片、反转及格式化等操作。文章涵盖字符串的基本概念、各种操作方法以及常用内置函数。通过多个示例代码展示了如何使用单引号、双引号和三重引号创建字符串,如何通过索引和切片访问与修改字符串内容,以及如何利用格式化方法处理字符串。此外,还介绍了字符串的不可变性及其在实际应用中的重要性。通过本文的学习,读者可以全面掌握Python字符串的使用技巧。
71 4
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
232 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
3月前
|
Linux Python
【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend'
ERROR: Error: No module named '_cffi_backend', Cannot find module. Please check the requirements.txt file for the missing module.
|
3月前
|
Go C++ Python
Python Tricks: String Conversion(Every Class Needs a ___repr__)
Python Tricks: String Conversion(Every Class Needs a ___repr__)
27 5
|
3月前
|
安全 JavaScript 前端开发
Python Tricks: A Shocking Truth About String Formatting(二)
Python Tricks: A Shocking Truth About String Formatting(二)
31 2
|
3月前
|
Python
Python Tricks: A Shocking Truth About String Formatting(一)
Python Tricks: A Shocking Truth About String Formatting(一)
59 0
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
116 80
|
22天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
40 14