首页 > 编程语言 >Python爬取中国最好大学排行榜报错TypeError: unsupported format string passed to NoneType.__format__

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

时间:2022-12-03 19:31:07浏览次数:46  
标签:__ string format text 字符串 html 报错 strip tds

​ 本文使用的是如下网址:

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                        #标签内非属性字符串,<>...<>中字符串,格式:<tag>.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()

标签:__,string,format,text,字符串,html,报错,strip,tds
From: https://blog.51cto.com/husheng/5908636

相关文章

  • threejs + blender 纺纱机 模型 实践
    模型:清花机、梳棉机、并条机、粗纱机、细纱机、络筒机   访问:demo......
  • CentOS7 编译安装最新的Linux Kernel 6.0 rc3
    哪个男孩不想手动编译一份自己的内核呢?安装编译环境CentOS7安装必要的包yumgroupinstall"DevelopmentTools"-y&&yuminstallopenssl-devel-y&&yuminstallrpm-buil......
  • “寒冬”之下,比特币ATM已无人问津!市场将更加艰难?
    自加密货币交易所FTX崩溃以来,比特币价格已跌到过1.6万美元低点。“寒冬”下,加密货币自动取款机的收益减少了28%,机器安装数量也出现下滑。根据CoinATMRadar的数据,美国加密......
  • H3C5.5模拟器轻松WEB配无线
    H3C5.5模拟器轻松WEB配无线本地虚拟网卡地址设置AC端配置:[AC]iphttpenable[AC]iphttpsenable#开启httphttps服务[AC]vlan100[AC-vlan100]qu[AC]intvlan100[AC-Vl......
  • 三丰云服务器
    三丰云的免费云服务器已经用了一段时间,还是不错的,免费虚拟主机也非常适合学生学习使用。用来学习搭建云服务器的网站也很容易,挺适合新手站长和开发者用来测试程序什么的,可以......
  • 代编写选股公式 交易模型 指标公式 主图指标 副图指标 定制
    通达信超牛主图指标公式、通达信ene主图指标公式、通达信主图指标公式大全、通达信最牛最全主图指标公式、通达信趋势线主图指标公式、通达信精美主图指标公式......
  • Microsoft.IO.RecyclableMemoryStream源码解读
    一、RecyclableMemoryStreamManager源码地址:https://github.com/Microsoft/Microsoft.IO.RecyclableMemoryStream小对象池和大对象池管理、RecyclableMemoryStream创建、......
  • JSP-入门学习、案例-改造Cookie案例
    JSP-入门学习4.JSP的内置对象:在jsp页面中不需要获取和创建,可以直接使用的对象jsp一共有9个内置对象。今天学习3个:request......
  • webpack
    目录简介解密方式简介!function(allModule){functionuseModule(whichModule){allModule[whichModule].call(null,"helloworld!");}useMod......
  • 抖音 校验库存 转单版
    importrequestsasreqfromopenpyxlimportWorkbookimportresession_wms=req.Session()login_url="https://apollo-api.xtw-tech.com/v1/auth/token"#请求......