Python BeautifulSoup:'list_iterator'对象不可订阅

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python BeautifulSoup:'list_iterator'对象不可订阅相关的知识,希望对你有一定的参考价值。

我正在尝试从以下html结构中提取内部文本:

<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>

我有以下美丽的汤代码来做到这一点:

from bs4 import BeautifulSoup as bs

soup = bs(html, "lxml")
div = soup.find("div", {"class": "account-age"})
span = div.children[1].children[0].children[0]
text = span.get_text()

不幸的是,Beautiful Soup正在抛出错误:'list_iterator'对象不可订阅。我如何解决此问题以提取我需要的文本?

答案

您可以通过直接链接根div中的标记来执行此操作:

div.div.div.span.get_text()
# u'Text to extract'
另一答案

首先找到div,然后使用如下属性访问span文本:

from bs4 import BeautifulSoup as bs

html = """<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>"""

soup = bs(html, "lxml")
div = soup.find('div', class_='account-age')
print(div.span.text)

这将显示:

Text to extract
另一答案

物业children是一个发电机。正如错误所说,它不是可订阅的。要获取列表,请改用contents

div.contents[1].contents[0].contents[0]

documentation

另一答案

试试这个:

from bs4 import BeautifulSoup as bs
html ='''<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>'''
soup = bs(html, 'html.parser')
div = soup.find("div", {"class": "account-age"})
span = div.find('span')
text = span.get_text()
print(text)

结果:

Text to extract

以上是关于Python BeautifulSoup:'list_iterator'对象不可订阅的主要内容,如果未能解决你的问题,请参考以下文章

如何解决'连接中止'。使用BeautifulSoup在Python中出错

Python BeautifulSoup:'list_iterator'对象不可订阅

python3用BeautifulSoup抓取id='xiaodeng',且正则包含‘elsie’的标签

python beautifulsoup 怎么定位class

python解析钩针图解到markdown文件/requests/BeautifulSoup

Python beautifulsoup 获取标签中的值 怎么获取?