【问题标题】:Beautiful Soup 'ResultSet' object has no attribute 'text'Beautiful Soup 'ResultSet' 对象没有属性 'text'
【发布时间】:2016-07-05 14:42:22
【问题描述】:
from bs4 import BeautifulSoup
import urllib.request
import win_unicode_console
win_unicode_console.enable()


link = ('https://pietroalbini.io/')  
req = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'})
url = urllib.request.urlopen(req).read()

soup =  BeautifulSoup(url, "html.parser")
body = soup.find_all('div', {"class":"wrapper"})

print(body.text)

嗨,我遇到了 Beautiful Soup 的问题,如果我在最后运行这段代码时没有“.text”,它会显示一个 div 列表,但如果我在最后添加“.text”,则会出现错误

Traceback(最近一次调用最后一次): 文件“script.py”,第 15 行,在 打印(正文。文本) AttributeError: 'ResultSet' 对象没有属性 'text'

【问题讨论】:

  • for div in body: print(div.text)。 find_all 返回 beautifulsoup 找到的符合您的条件的项目列表。正如错误所说,结果对象集没有属性文本,但结果集中的项目(应该找到)有。
  • @slayer,这还不足以回答问题吗?

标签: python beautifulsoup


【解决方案1】:

find_all 返回一个 ResultSet 对象,您可以使用 for 循环对其进行迭代。你可以做的是:

for wrapper in body.find_all('div', {"class":"wrapper"}):
   print wrapper.text

【讨论】:

  • 实际上它返回一个ResultSet 对象(直接在错误消息中说明),它可能是set 的子类,但可能不是list(您可能是指iterable?)
【解决方案2】:

如果你输入:

print(type(body))

你会看到body<class 'bs4.element.ResultSet'> 这意味着所有 匹配类的元素。您可以遍历它们:

for div in body:
    print(div.text)

或者如果你知道你只有 div,你可以使用 find 代替:

div = soup.find('div', {"class":"wrapper"})
div.text

【讨论】:

    【解决方案3】:

    可能应该作为答案发布..正如 cmets 中所说的几乎一字不差

    您的代码应如下所示:

    for div in body: 
        print div.text
        #python3
        #print(div.text)
    

    或者一些你喜欢的命名模式。

    find_all 方法返回生成的列表(此处松散地使用术语列表)beautifulsoup 在递归或非递归地解析源网页 html 后发现与您的条件匹配的项目,具体取决于您的搜索方式。

    正如错误所说,结果对象集没有属性文本,因为它不是元素,而是它们的集合。 但是,结果集中的项目(应该找到)可以。

    您可以查看文档here

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 2018-11-15
      • 1970-01-01
      • 2021-01-16
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多