<ul class="mainview">
<li>
<input value="ABCD" class="origianl">
</li>
</ul>
这是HTML行和
mainview = soup.find(class_="mainview")
child = mainview.children
child_value = child.get("value")
[print(x) for x in child_value]
这是我用来获得&#34; ABCD&#34;
的代码并且我总是得到错误
AttributeError: 'list_iterator' object has no attribute 'get'
我搜索了谷歌和stackoverflow查询,但任何一个为我工作... 如何从input元素中获取值?
答案 0 :(得分:0)
children
(类似于'list_iterator'
)表示许多项目,因此您获得的列表不是单个项目。它甚至可以列出一个项目或空列表,但它仍然是一个列表。您必须使用for
循环对列表中的每个项目使用get()
或使用索引[0]
仅获取第一个项目(如果列表不为空)
但在BeautifulSoup
中,它不仅包含tags
(类Tag
)内的所有元素,还在标记(类text
)之间提供NavigableString
#39; t .get()
方法。
此代码
from bs4 import BeautifulSoup
html = '''
<ul class="mainview">
<li>
<input value="ABCD" class="origianl">
</li>
</ul>
'''
soup = BeautifulSoup(html, 'html.parser')
mainview = soup.find(class_="mainview")
for child in mainview.children:
print(type(child))
给出
<class 'bs4.element.NavigableString'>
<class 'bs4.element.Tag'>
<class 'bs4.element.NavigableString'>
最好使用下一个find()
查找单个元素或find_all()
来获取元素列表。
from bs4 import BeautifulSoup
html = '''
<ul class="mainview">
<li>
<input value="ABCD" class="origianl">
</li>
</ul>
'''
soup = BeautifulSoup(html, 'html.parser')
mainview = soup.find(class_="mainview")
child = mainview.find(class_="origianl")
print(child.get('value'))
修改强>
children
仅提供第一级子项(<li>
),但不包含子项(<input>
)中的子项,因此您必须使用内部for
循环来获取<input>
<li>
from bs4 import BeautifulSoup
import bs4
html = '''
<ul class="mainview">
<li>
<input value="ABCD" class="origianl">
</li>
</ul>
'''
soup = BeautifulSoup(html, 'html.parser')
mainview = soup.find(class_="mainview")
print('--- children ---')
for child in mainview.children:
print('> tag:', child.name)
print('> type:', type(child))
#print('>content:', child)
if isinstance(child, bs4.element.Tag):
print('> value:', child.get('value'))
print(' --- subchildren ---')
for subchild in child.children:
print(' > tag:', subchild.name)
print(' > type:', type(subchild))
#print(' >content:', subchild)
if isinstance(subchild, bs4.element.Tag):
print(' > value:', subchild.get('value'))
print(' -----------')
print('-----------')
结果:
--- children ---
> tag: None
> type: <class 'bs4.element.NavigableString'>
-----------
> tag: li
> type: <class 'bs4.element.Tag'>
> value: None
--- subchildren ---
> tag: None
> type: <class 'bs4.element.NavigableString'>
-----------
> tag: input
> type: <class 'bs4.element.Tag'>
> value: ABCD
-----------
> tag: None
> type: <class 'bs4.element.NavigableString'>
-----------
-----------
> tag: None
> type: <class 'bs4.element.NavigableString'>
-----------