Python 美化组获取(';值';)

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')意味着许多项,

这是我用来获取“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'
)意味着许多项,所以您可以获取列表而不是单个项。它可以是包含一个项目的偶数列表,也可以是空列表,但它仍然是一个列表。必须使用
for
循环才能对列表中的每个项目使用
get()
,或者使用index
[0]
仅获取第一个项目(如果列表不为空)

但是在
BeautifulSoup
中,它提供了内部的所有元素,不仅是
标记(class
Tag
),而且还有
文本(class
Navigablesting
),这些标记之间没有
.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'>
    -----------