使用 BeatifulSoup 选择其他两个标签之间的所有标签

我想提取包含在两个标签之间的给定标签的所有实例。目前我正在与 BeautifulSoup 合作。您可以在下面找到一个示例:


<p class='x' id = '1'> some content 1 <p>

<p class='y' id = 'a'> some content a <p>

<p class='y' id = 'b'> some content b <p>

<p class='y' id = 'c'> some content c <p>

<p class='potentially some other class'> <p>

<p class='x' id = '2'> some content 2 <p>

<p class='y' id = 'd'> some content d <p>

<p class='y' id = 'e'> some content e <p>

<p class='y' id = 'f'> some content f <p>

我有兴趣在两个标签“x”之间选择“y”类的所有实例,它们也具有不同的 id。关于具体示例,我想选择所有带有 class = 'y' 的 p,然后检索文本。我最终想要的输出是:“某些内容 a”、“某些内容 b”和“某些内容 c”。


我尝试使用 findAllNext 方法,但这给了我“一些内容 a”、“一些内容 b”、“一些内容 c”和“一些内容 d”、“一些内容 e”、“一些内容 f”。


下面是我的代码


par = BeautifulSoup(HTML_CODE).content, 'lxml') 

loc = par.find('p', class_ = 'x', id ='1')

desired = loc.findAllNext('p', class_ = 'y')

有什么方法可以避免选择出现在 class='x' 和 id = '2' 标签之后的 class = 'y' 实例吗?


白衣非少年
浏览 203回答 1
1回答

繁花如伊

你可以从你想要的地方开始迭代并结束它,直到找到一些标记完成。from bs4 import BeautifulSouphtml = """<p class='x' id = '1'> some content 1 </p><p class='y' id = 'a'> some content a </p><p class='y' id = 'b'> some content b </p><p class='y' id = 'c'> some content c </p><p class='potentially some other class1'> potentially some other class 1 </p><p class='potentially some other class2'> potentially some other class 2</p><p class='potentially some other class3'> potentially some other class 3 </p><p class='x' id = '2'> some content 2 </p><p class='y' id = 'd'> some content d </p><p class='y' id = 'e'> some content e </p><p class='y' id = 'f'> some content f </p>"""soup = BeautifulSoup(html,"lxml")start = soup.find("p",class_="y",id="c")end = soup.find("p",class_="x",id="2")def next_ele(ele,result=[]):&nbsp; &nbsp; row = ele.find_next("p")&nbsp; &nbsp; if not row or row == end:&nbsp; &nbsp; &nbsp; &nbsp; return result&nbsp; &nbsp; result.append(row)&nbsp; &nbsp; return next_ele(row,result)print(next_ele(start))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python