2

有没有办法使用 BeautifulSoup 来匹配具有指示class属性的标签,而不是指示class属性等?例如,在这个简单的 HTML 中:

<html>
 <head>
  <title>
   Title here
  </title>
 </head>
 <body>
  <div class="one two">
   some content here
  </div>
  <div class="two">
   more content here
  </div>
 </body>
</html>

是否可以只匹配divwithclass="two"而不匹配divwith class="one two"?除非我遗漏了什么,否则文档的该部分不会给我任何想法。这是我目前使用的代码:

from bs4 import BeautifulSoup

html = '''
<html>
 <head>
  <title>
   Title here
  </title>
 </head>
 <body>
  <div class="one two">
   should not be matched
  </div>
  <div class="two">
   this should be matched
  </div>
 </body>
</html>
'''

soup = BeautifulSoup(html)
div_two = soup.find("div", "two")
print(div_two.contents[0].strip())

我试图让它打印this should be matched而不是should not be matched.

编辑:在这个简单的例子中,我知道类的唯一选项是"one two"or "two",但在生产代码中,我只知道我想要匹配的将有 class "two"; 除了 之外,其他标签可能还有大量其他类"two",这可能是未知的。

在相关说明中,阅读版本4的文档也很有帮助,而不是我之前链接的版本 3。

4

2 回答 2

4

尝试:

divs = soup.findAll('div', class="two")

for div in divs:
    if div['class'] == ['two']:
        pass # handle class="two"
    else:
        pass # handle other cases, including but not limited to "one two"
于 2012-07-16T16:59:45.540 回答
0

希望,下面的代码可以帮助你。虽然我没试过这个。

soup.find("div", { "class" : "two" })
于 2012-07-16T17:01:16.353 回答