Python 漂亮的汤很难得到嵌套的HTML
使用BeautifulSoup,我似乎无法捕获所有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
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渲染=/