我想抓取一个父标签,如果它包含一个标记,比如说MARKER。例如,我有:
<a>
<b>
<c>
MARKER
</c>
</b>
<b>
<c>
MARKER
MARKER
</c>
</b>
<b>
<c>
stuff
</c>
</b>
</a>
我想抢:
<b>
<c>
MARKER
</c>
</b>
<b>
<c>
MARKER
MARKER
</c>
</b>
我目前的代码是:
for stuff in soup.find_all(text=re.compile("MARKER")):
post = stuff.find_parent("b")
这很有效,但是,它给了我:
<b>
<c>
MARKER
</c>
</b>
<b>
<c>
MARKER
MARKER
</c>
</b>
<b>
<c>
MARKER
MARKER
</c>
</b>
发生这种情况的原因很明显,它为找到的每个 MARKER 打印整个包含标签一次,因此包含两个 MARKER 的标签被打印两次。但是,我不知道如何告诉 BeautifulSoup 在完成后不要在给定标签内搜索(我怀疑,具体来说,不能这样做?)或以其他方式阻止这种情况,除了可能将所有内容索引到字典并拒绝重复?
编辑:这是我正在处理的具体案例,这给我带来了麻烦,因为出于某种原因,尽管是剥离版本,但上述内容实际上并没有产生错误。(如果有人好奇,我正在获取一个播放帖子的特定论坛主题。)
from bs4 import BeautifulSoup
import urllib.request
import re
url = 'http://forums.spacebattles.com/threads/asukaquest-3-starfish-eater.258271/page-179'
soup = urllib.request.urlopen(url).read()
sbsoup = BeautifulSoup(soup)
for stuff in sbsoup.find_all(text=re.compile("\[[Xx]\]")):
post = stuff.find_parent("li")
print(post.find("a", class_="username").string)
print(post.find("blockquote", class_="messageText ugc baseHtml").get_text())