首页 >后端开发 >Python教程 >如何正确访问 BeautifulSoup 的 `findAll()` 或 `find_all()` 返回的列表中的属性值?

如何正确访问 BeautifulSoup 的 `findAll()` 或 `find_all()` 返回的列表中的属性值?

DDD
DDD原创
2024-12-08 02:40:12380浏览

How to Correctly Access Attribute Values from a List Returned by BeautifulSoup's `findAll()` or `find_all()`?

使用 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 属性,应使用以下方法:

  1. 使用 .find_all() 而不是 .findAll():

    .find_all() 返回所有找到的元素的列表,而 .find_all() 仅返回找到的一个(第一个)

  2. 访问列表中第一个元素的 value 属性:

    由于 BeautifulSoup 返回找到的元素的列表,因此有必要指定要访问的元素的索引。在这种情况下,可以通过以下方式访问列表中第一个元素的 value 属性:

    output = inputTag[0]['value']
  3. 或者,使用 .find() 获取第一个元素:

    除了使用 .find_all() 之外,还可以使用 .find() 直接获取第一个找到的元素:

    inputTag = soup.find(attrs={"name": "stainfo"})
    output = inputTag['value']

以上是如何正确访问 BeautifulSoup 的 `findAll()` 或 `find_all()` 返回的列表中的属性值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn