Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 漂亮的汤很难得到嵌套的HTML_Python_Html_Beautifulsoup - Fatal编程技术网

Python 漂亮的汤很难得到嵌套的HTML

Python 漂亮的汤很难得到嵌套的HTML,python,html,beautifulsoup,Python,Html,Beautifulsoup,使用BeautifulSoup,我似乎无法捕获所有HTML元素。具体来说,我的目标是尝试在中获取4值 <button class="css-812ha7 " type="button">4</button> 返回: [ <div class="css-rs2cuv"> <button class="css-rzdbbc" type="button"> <svg class="cs

使用BeautifulSoup,我似乎无法捕获所有HTML元素。具体来说,我的目标是尝试在中获取
4

    <button class="css-812ha7 " type="button">4</button>
返回:

[
     <div class="css-rs2cuv">
         <button class="css-rzdbbc" type="button">
             <svg class="css-1jc5boz" viewbox="0 95 57 95">
                 <path d="M57 142.5L9.5"></path>
             </svg>
         </button>
         <button class="css-rzdbbc" type="button">
             <svg class="css-15yx468" viewbox="0 95 57 95">
                 <path d="M57 142.5L9.5 95 0 104.5l38"></path>
             </svg>
         </button>
     </div>
]
[
]
我认为我的代码行将返回所有标记和嵌套标记,然后我可以运行更多方法来获取所需的值

我正在解析的HTML:

<div class="css-rs2cuv">
    <button class="css-rzdbbc" type="button">
        <svg viewBox="0 95 57 95" class="css-1jc5boz">
             <path d="M57 142.5L9.5"></path>
        </svg>
    </button>
    <button class="css-10po51q " type="button">1</button>
    <button class="css-812ha7 " type="button">2</button>
    <button class="css-812ha7 " type="button">3</button>
    <div class="css-ufx8pa " data-comp="Flex Box">...</div>
    <button class="css-812ha7 " type="button">4</button>
    <button class="css-mnn3vx " type="button">
        <svg viewBox="0 95 57 95" class="css-15yx468 ">
            <path d="M57 142.5L9.5 95 0 104.5l38"></path>
        </svg>
    </button>
</div>

1.
2.
3.
...
4.
返回与该标记匹配的所有标记的列表。您可以使用此列表的索引获取所需的标记,然后使用
.text
获取其中的文本

from bs4 import BeautifulSoup
html="""
<div class="css-rs2cuv">
    <button class="css-rzdbbc" type="button">
        <svg viewBox="0 95 57 95" class="css-1jc5boz">
             <path d="M57 142.5L9.5"></path>
        </svg>
    </button>
    <button class="css-10po51q " type="button">1</button>
    <button class="css-812ha7 " type="button">2</button>
    <button class="css-812ha7 " type="button">3</button>
    <div class="css-ufx8pa " data-comp="Flex Box">...</div>
    <button class="css-812ha7 " type="button">4</button>
    <button class="css-mnn3vx " type="button">
        <svg viewBox="0 95 57 95" class="css-15yx468 ">
            <path d="M57 142.5L9.5 95 0 104.5l38"></path>
        </svg>
    </button>
</div>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('.css-812ha7')[2].text)
返回与该标记匹配的所有标记的列表。您可以使用此列表的索引获取所需的标记,然后使用
.text
获取其中的文本

from bs4 import BeautifulSoup
html="""
<div class="css-rs2cuv">
    <button class="css-rzdbbc" type="button">
        <svg viewBox="0 95 57 95" class="css-1jc5boz">
             <path d="M57 142.5L9.5"></path>
        </svg>
    </button>
    <button class="css-10po51q " type="button">1</button>
    <button class="css-812ha7 " type="button">2</button>
    <button class="css-812ha7 " type="button">3</button>
    <div class="css-ufx8pa " data-comp="Flex Box">...</div>
    <button class="css-812ha7 " type="button">4</button>
    <button class="css-mnn3vx " type="button">
        <svg viewBox="0 95 57 95" class="css-15yx468 ">
            <path d="M57 142.5L9.5 95 0 104.5l38"></path>
        </svg>
    </button>
</div>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('.css-812ha7')[2].text)

没有足够的html来告诉您是否需要使用
select
select_one
select_one
将返回第一个匹配项),但是对于显示的html,您可以使用所需元素之前的元素属性之间的关系(通过指定[
数据comp='Flex Box']
),与要获取的元素类相邻的同级组合中。
+
是一个

对于此css选择器组合的多个匹配项,如果不是第一个匹配项,
select
可用于检索所有匹配项;您可以索引到其中以检索特定项

在这个场景中,仅使用类名作为选择器几乎肯定会更快,但值得注意其他方法

from bs4 import BeautifulSoup
html="""
<div class="css-rs2cuv">
    <button class="css-rzdbbc" type="button">
        <svg viewBox="0 95 57 95" class="css-1jc5boz">
             <path d="M57 142.5L9.5"></path>
        </svg>
    </button>
    <button class="css-10po51q " type="button">1</button>
    <button class="css-812ha7 " type="button">2</button>
    <button class="css-812ha7 " type="button">3</button>
    <div class="css-ufx8pa " data-comp="Flex Box">...</div>
    <button class="css-812ha7 " type="button">4</button>
    <button class="css-mnn3vx " type="button">
        <svg viewBox="0 95 57 95" class="css-15yx468 ">
            <path d="M57 142.5L9.5 95 0 104.5l38"></path>
        </svg>
    </button>
</div>
"""
soup = BeautifulSoup(html,'lxml')
print(soup.select_one("[data-comp='Flex Box'] + .css-812ha7").text)
从bs4导入美化组
html=”“”
1.
2.
3.
...
4.
"""
soup=BeautifulSoup(html,'lxml')
打印(soup.select_one(“[data comp='Flex Box']+.css-812ha7”).text)

没有足够的html来告诉您是否需要使用
select
select one
select one
将返回第一个匹配项),但是对于显示的html,您可以使用元素属性与所需属性之间的关系(通过指定[
数据comp='Flex Box']
),与要获取的元素类相邻的同级组合中。
+
是一个

对于此css选择器组合的多个匹配项,如果不是第一个匹配项,
select
可用于检索所有匹配项;您可以索引到其中以检索特定项

在这个场景中,仅使用类名作为选择器几乎肯定会更快,但值得注意其他方法

from bs4 import BeautifulSoup
html="""
<div class="css-rs2cuv">
    <button class="css-rzdbbc" type="button">
        <svg viewBox="0 95 57 95" class="css-1jc5boz">
             <path d="M57 142.5L9.5"></path>
        </svg>
    </button>
    <button class="css-10po51q " type="button">1</button>
    <button class="css-812ha7 " type="button">2</button>
    <button class="css-812ha7 " type="button">3</button>
    <div class="css-ufx8pa " data-comp="Flex Box">...</div>
    <button class="css-812ha7 " type="button">4</button>
    <button class="css-mnn3vx " type="button">
        <svg viewBox="0 95 57 95" class="css-15yx468 ">
            <path d="M57 142.5L9.5 95 0 104.5l38"></path>
        </svg>
    </button>
</div>
"""
soup = BeautifulSoup(html,'lxml')
print(soup.select_one("[data-comp='Flex Box'] + .css-812ha7").text)
从bs4导入美化组
html=”“”
1.
2.
3.
...
4.
"""
soup=BeautifulSoup(html,'lxml')
打印(soup.select_one(“[data comp='Flex Box']+.css-812ha7”).text)

我使用了lxml解析器。这会有什么不同吗?@Liondancer没有。我刚刚测试了它。我尝试了
soup.select('.css-812ha7')
,但我的代码返回[]@Liondancer,我希望你得到了输出。在你的例子中,我得到了输出,但我认为我的python代码由于某种原因,与我的browserI使用的lxml解析器相比,它给了我不同的HTML。这会有所不同吗?@Liondancer否。我刚刚测试了它。我尝试了
汤。选择('.css-812ha7')
,但我的代码返回[]@Liondancer我希望你得到了输出。在你的例子中,我得到了,但我认为我的python代码由于某种原因与我的浏览器相比,它给了我不同的HTML结果我的代码获取了页面源代码,而我的浏览器有不同的源代码,因为JS呈现=/结果我的代码获取了页面源代码,而我的浏览器有不同的源代码因为JS渲染=/