使用 BeautifulSoup 访问属性值
尝试使用 BeautifulSoup 和以下代码从特定输入标记中提取值属性时:
import urllib f = urllib.urlopen("http://58.68.130.147") s = f.read() f.close() from BeautifulSoup import BeautifulStoneSoup soup = BeautifulStoneSoup(s) inputTag = soup.findAll(attrs={"name": "stainfo"}) output = inputTag['value'] print str(output)
发生错误:TypeError: 列表索引必须是整数,而不是str.
BeautifulSoup 的文档表明字符串在这种情况下不应该造成问题。然而,错误似乎另有说明。
解决方案
问题在于使用 .findAll(),它返回所有找到的元素的列表。要访问特定标签的 value 属性,应使用以下方法:
使用 .find_all() 而不是 .findAll():
.find_all() 返回所有找到的元素的列表,而 .find_all() 仅返回找到的一个(第一个)
访问列表中第一个元素的 value 属性:
由于 BeautifulSoup 返回找到的元素的列表,因此有必要指定要访问的元素的索引。在这种情况下,可以通过以下方式访问列表中第一个元素的 value 属性:
output = inputTag[0]['value']
或者,使用 .find() 获取第一个元素:
除了使用 .find_all() 之外,还可以使用 .find() 直接获取第一个找到的元素:
inputTag = soup.find(attrs={"name": "stainfo"}) output = inputTag['value']
以上是如何正确访问 BeautifulSoup 的 `findAll()` 或 `find_all()` 返回的列表中的属性值?的详细内容。更多信息请关注PHP中文网其他相关文章!