我为next_sibling
的使用而挣扎(与next_element
类似)。如果作为属性使用,我不会得到任何返回,但是如果用作find_next_sibling
(或find_next
),那么它就能工作。来自文档
find_next_sibling
:“遍历树中元素的其他兄弟节点。.返回(匹配的)第一个find_next
:“这些方法使用.next_elements迭代.并返回第一个方法”因此,find_next_sibling
依赖于next_siblings
。next_sibling
所依赖的是什么,为什么他们什么也不返回?
from bs4 import BeautifulSoup
html = """
<div class="......>
<div class="one-ad-desc">
<div class="one-ad-title">
<a class="one-ad-link" href="www this is the URL!">
<h5>
Text needed
</h5>
</a>
</div>
<div class="one-ad-desc">
...and some more needed text here!
</div>
</div>
</div>
"""
soup = BeautifulSoup(html, 'lxml')
for div in soup.find_all('div', class_="one-ad-title"):
print('-> ', div.next_element)
print('-> ', div.next_sibling)
print('-> ', div.find_next_sibling())-> ')
break
输出
->
->
-> <div class="one-ad-desc">
...and some more needed text here!
</div>
发布于 2022-03-25 13:11:14
在我看来,这里的要点是.find_next_sibling()
作用域位于树上的下一层上。
而.next_element
和.next_sibling
作用域位于解析树的相同级别的上。
因此,查看并打印元素的名称,您将看到下一个元素不是标记,因为树的同一级别上没有任何内容:
for div in soup.find_all('div', class_="one-ad-title"):
print('-> ', div.next_element.name)
print('-> ', div.next_sibling.name)
print('-> ', div.find_next_sibling().name)
#output
-> None
-> None
-> div
因此,如果您将输入更改为一行和no空格,则标记之间的.将得到以下结果:
from bs4 import BeautifulSoup
html = """
<div class="......><div class="one-ad-desc"><div class="one-ad-title"><a class="one-ad-link" href="www this is the URL!"><h5>Text needed</h5></a></div><div class="one-ad-desc">...and some more needed text here!</div></div></div>"""
soup = BeautifulSoup(html, 'lxml')
for div in soup.find_all('div', class_="one-ad-title"):
print('-> ', div.next_element)
print('-> ', div.next_sibling)
print('-> ', div.find_next_sibling())
输出:
-> <a class="one-ad-link" href="www this is the URL!"><h5>Text needed</h5></a>
-> <div class="one-ad-desc">...and some more needed text here!</div>
-> <div class="one-ad-desc">...and some more needed text here!</div>
Note "text selected“不是在您选择的标签的同级中,而是在它的一个子标记中。选择“文本所需”的-> print('-> ', div.find_next().text)
https://stackoverflow.com/questions/71616816
复制相似问题