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]
另一答案
试试这个:
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