<!DOCTYPE html>
<html class="client-nojs" dir="ltr" lang="en">
<body>
<h2><span class="mw-headline" id="Danish">Danish</span></h2>
<h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection">
</h3>
<p><strong class="Latn headword" lang="da">bringen</strong>blabla</span></p>
<ol>
<li><span class="form-of-definition">blabla</span></li>
</ol>
<hr/>
<h2><span class="mw-headline" id="German">German</span>blabla</span></h2>
<h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection">
</h3>
<h3><span class="mw-headline" id="Etymology">blabla</span></h3>
<p>From <span class="etyl"></p>
<h3><span class="mw-headline" id="Pronunciation">Pronunciation</span></h3>
<ul>
</body>
</html>
我需要BS忽略所有内容,直到<h2><span class="mw-headline" id="German">
。当我创建汤变量时,我最好将它分开。 id="German"
部分不是变量,其他一切都是变量。
我尝试使用内置拆分功能,但这不起作用。还看了一些答案,但我没有从他们那里得到任何更明智的答案。提示?
编辑:正如您所看到的,有两个带有'名词'id的跨度。我只需要在'德国'之后出现的那个。我不确定如果不是分裂,BeautifulSoup只能找到第二个。
答案 0 :(得分:2)
您可以使用Element.find_all_next()
method找到所需内容,这样您就可以在 之后搜索整个树:
start = soup.select('h2 span#German')[0]
headlines = start.find_all_next('span', id='Noun')
在德语id
标记之后,这会找到Noun
属性设置为<h2>
列出的所有范围。
有一个相应的Element.find_next()
方法可以找到第一个下一个匹配而不是全部。
换句话说,find_all_next()
和find_next()
完全完成 find_all()
和find()
,但只搜索超过给定起点的树。还有find_all_previous()
and find_previous()
methods可以向另一个方向搜索。
演示:
>>> soup = BeautifulSoup('''\
... <!DOCTYPE html>
...
... <html class="client-nojs" dir="ltr" lang="en">
... <body>
... <h2><span class="mw-headline" id="Danish">Danish</span></h2>
... <h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection">
... </h3>
... <p><strong class="Latn headword" lang="da">bringen</strong>blabla</span></p>
... <ol>
... <li><span class="form-of-definition">blabla</span></li>
... </ol>
... <hr/>
... <h2><span class="mw-headline" id="German">German</span>blabla</span></h2>
... <h3><span class="mw-headline" id="Noun">Noun</span><span class="mw-editsection">
... </h3>
... <h3><span class="mw-headline" id="Etymology">blabla</span></h3>
... <p>From <span class="etyl"></p>
... <h3><span class="mw-headline" id="Pronunciation">Pronunciation</span></h3>
... <ul>
... </body>
... </html>
... ''')
>>> start = soup.select('h2 span#German')[0]
>>> start.find_all_next('span', id='Noun')
[<span class="mw-headline" id="Noun">Noun</span>]