Python 美化组获取(';值';)
这是我用来获取“ABCD”的代码 我总是得到错误的答案Python 美化组获取(';值';),python,beautifulsoup,Python,Beautifulsoup,这是我用来获取“ABCD”的代码 我总是得到错误的答案 mainview = soup.find(class_="mainview") child = mainview.children child_value = child.get("value") [print(x) for x in child_value] 我搜索了google和stackoverflow查询,但任何一个Anwser都为我工作。。。 如何从输入元素中获取值?子项(类似于'list\u iterator')意味着许多项,
mainview = soup.find(class_="mainview")
child = mainview.children
child_value = child.get("value")
[print(x) for x in child_value]
我搜索了google和stackoverflow查询,但任何一个Anwser都为我工作。。。
如何从输入元素中获取值?子项(类似于'list\u iterator'
)意味着许多项,所以您可以获取列表而不是单个项。它可以是包含一个项目的偶数列表,也可以是空列表,但它仍然是一个列表。必须使用for
循环才能对列表中的每个项目使用get()
,或者使用index[0]
仅获取第一个项目(如果列表不为空)
但是在BeautifulSoup
中,它提供了内部的所有元素,不仅是标记(classTag
),而且还有文本(classNavigablesting
),这些标记之间没有.get()
方法
此代码
AttributeError: 'list_iterator' object has no attribute 'get'
编辑:
children
只给出第一级子项(),而不提供这些子项中的子项(),因此您必须使用for
循环的内部来获取中的
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'))
从bs4导入美化组
进口bs4
html=“”
-
'''
soup=BeautifulSoup(html,'html.parser')
mainview=soup.find(class=“mainview”)
打印('--children---')
对于mainview.children中的子级:
打印('>tag:',child.name)
打印(“>类型:”,类型(子))
#打印(“>内容:”,子项)
如果isinstance(子级,bs4.element.Tag):
打印('>value:',child.get('value'))
打印('---子级--')
对于child.children中的subchild:
打印('>tag:',subchild.name)
打印('>type:',type(subchild))
#打印(“>内容:”,子孩子)
如果isinstance(子孩子,bs4.element.Tag):
打印('>value:',subchild.get('value'))
打印('------------')
打印('------------')
结果:
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('-----------')
——儿童---
>标签:无
>类型:
-----------
>标签:李
>类型:
>价值:无
---亚儿童---
>标签:无
>类型:
-----------
>标签:输入
>类型:
>值:ABCD
-----------
>标签:无
>类型:
-----------
-----------
>标签:无
>类型:
-----------
谢谢您,尽管我的示例中只有一个输入,但我的工作有一系列输入,我愚蠢地错误地认为child只有一个值。还有一个问题——我现在描述了这个问题。有些元素NavigableString
只在标记中保留文本,而没有.get()
方法。您必须检查是否为实例(child,Tag):child.get()
顺便说一句:还有其他问题mainview。children
只提供第一级的子对象-它将提供,但不提供
。要获取
,您必须在mainview.children
中找到
,然后获取其子项“”。
<class 'bs4.element.NavigableString'>
<class 'bs4.element.Tag'>
<class 'bs4.element.NavigableString'>
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'))
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'>
-----------