使用美丽的汤,我似乎无法捕获所有HTML元素。具体来说,我旨在尝试在
中获取<img data-lazy="img/lazyfonz1.png"/>
$('.lazy').slick({
lazyLoad: 'ondemand',
slidesToShow: 3,
slidesToScroll: 1
});
值
4
但是我无法使用漂亮的汤来做这件事,因为我无法捕获嵌套标签
代码:
<button class="css-812ha7 " type="button">4</button>
返回:
soup.select('.css-rs2cuv')
我认为我的代码行将返回所有标签和嵌套标签,然后我可以运行更多方法来获取所需的值
我正在解析的HTML:
[
<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>
]
答案 0 :(得分:1)
select返回与该标签匹配的所有标签的列表。您可以使用此列表的索引来获取所需的标签,然后使用.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)
输出
4
答案 1 :(得分:1)
没有足够的html来告诉您是否需要使用select
或select_one
(select_one
将返回第一个匹配项),但是对于显示的html,您可以使用的属性之间的关系在所需同级元素之前的元素(通过指定[data-comp='Flex Box']
的{{3}}),与您要抓取的元素类别相邻的同级组合中。 +
是attribute=value selector。
此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)