Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str


Posted in Python onAugust 07, 2019

在python的Beautiful Soup 4 扩展库的使用过程中出现了

TypeError: list indices must be integers or slices, not str

这个错误,这里就分析一下为什么会报错以及如何解决。

这个错误的意思是'类型错误:list的索引必须是'integers'或者'slices'不能是'str'

我出现错误的代码:

#引入库
from bs4 import BeautifulSoup
#读取页面
soup = BeautifulSoup(open('index.html'))
#获取标签
img_tag = div.select("img")
#获取标签属性(这里报错)
src = img_tag['src']
#输出
print(src)

经过检查对比后我发现错误原因

就是获取标签时获取的是list数据而不是tag

主要原因如下:

主要就是获取的内容和自己认为的有偏差。

也就是find()和find_all(),select()和select_one()的区别。

当使用

find()
select_one()

时,获得的是一个标签

类型为

<class 'bs4.element.Tag'>

所以可以使用tag['class']取值

当使用

find_all()
select()

时,获得的是组标签(就算只有一个标签也是一组)

类型为

#find_all()的返回值类型
<class 'bs4.element.ResultSet'>
#select()的返回值类型
<class 'list'>

这时,我们要取值就需要先定位是list(ResultSet)中的那个标签在取值

例如tag[0]['class']

解决方法

方法一:

#引入库
from bs4 import BeautifulSoup
#读取页面
soup = BeautifulSoup(open('index.html'))
#获取标签
img_tag = div.select("img")
#获取标签属性(这里有改动)
src = img_tag[0]['src']
#输出
print(src)

因为我知道页面中的结构可以确保获得的第一个bag为我需要的标签。
所以使用src = img_tag[0]['src']来获取属性信息。

方法二:

#引入库
from bs4 import BeautifulSoup
#读取页面
soup = BeautifulSoup(open('index.html'))
#获取标签
img_tag = div.select_one("img")
#获取标签属性(这里有改动)
src = img_tag['src']
#输出
print(src)

同上理,这样修改也是可以成功的。

出现这种问题还是因为自己不用心,还是要时刻提醒自己。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中编写ORM框架的入门指引
Apr 29 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python 获取当前所在目录的方法详解
Aug 02 Python
Python决策树分类算法学习
Dec 22 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
django+mysql的使用示例
Nov 23 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
使用python+whoosh实现全文检索
Dec 09 Python
Python Tornado核心及相关原理详解
Jun 24 Python
python利用7z批量解压rar的实现
Aug 07 #Python
django基础学习之send_mail功能
Aug 07 #Python
python实现本地批量ping多个IP的方法示例
Aug 07 #Python
Django model 中设置联合约束和联合索引的方法
Aug 06 #Python
对django 模型 unique together的示例讲解
Aug 06 #Python
python django model联合主键的例子
Aug 06 #Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 #Python
You might like
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
用 JSON 处理缓存
2007/04/27 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python提取字典key列表的方法
2015/07/11 Python
Python网络编程 Python套接字编程
2017/09/13 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python装饰器的特性原理详解
2019/12/25 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
学校大课间活动方案
2014/01/30 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
大学生秋游活动方案
2014/02/17 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
电钳工人个人求职信
2014/05/10 职场文书
2014和解协议书范文
2014/09/15 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python