Beautifulsoup在其他标签正下方找到标签的简便方法

问题描述 投票:-1回答:2

在漂亮的汤中,我知道您可以使用CSS选择器轻松在其他标签下找到标签,即如果我具有以下虚拟XML:

<a>

  <b>
    <c>textabc1</c>
  </b>

  <b>
    <c>textabc2</c>
  </b>

  <c>
    <c>textacc</c>
  </c>

</a>

创建汤后,假设我想在(a-> b-> c)下的b下找到所有标签c我只需运行以下命令:

soup.select('a > b > c')

这让我:

[<c>textabc1</c>, <c>textabc2</c>]

有没有不使用CSS选择器的简便方法?

我花了整个下午试图找到一种简单的方法来使用“更标准”的漂亮汤方法。在我提供的示例中,标签缩进有3个级别,但是非常重要的一点是要等到运行时,我才能知道xml,标签及其缩进级别(所有内容都将作为参数传递给脚本),因此,我可能需要查找1到n个缩进级别的标签(如果我事先知道我最多只能搜索3个缩进级别,则我大概可以使用3个缩进循环和findAll / findChildren方法的组合。想到了某种递归方法,但逻辑似乎很复杂。

先谢谢您。

python python-3.x web-scraping beautifulsoup
2个回答
0
投票

如果您只想标记的所有出现。然后尝试以下操作。

all_c_elements = soup.find_all("c")

这将返回页面上的所有元素,而不管它们在树结构中的位置如何。


0
投票

我不知道你想要什么。

from simplified_scrapy import SimplifiedDoc,req,utils
html='''
<a>
  <b>
    <c>textabc1</c>
  </b>
  <b>
    <c>textabc2</c>
  </b>
  <c>
    <c>textacc</c>
  </c>
</a>
'''
doc  = SimplifiedDoc(html)
cs = doc.selects('a>a|b').c
print (cs)
cs = doc.a.getElements(['a','b']).getElement('c')
print (cs)
cs = doc.selects('a>a|b|c').c
print (cs)

结果:

[{'tag': 'c', 'html': 'textabc1'}, {'tag': 'c', 'html': 'textabc2'}]
[{'tag': 'c', 'html': 'textabc1'}, {'tag': 'c', 'html': 'textabc2'}]
[{'tag': 'c', 'html': 'textabc1'}, {'tag': 'c', 'html': 'textabc2'}, {'tag': 'c', 'html': 'textacc'}]
© www.soinside.com 2019 - 2024. All rights reserved.