BeautifulSoup中有任何严格的findAll函数吗?

时间:2015-12-18 13:33:22

标签: python python-2.7 beautifulsoup

我正在使用Python-2.7和BeautifulSoup

如果我无法解释我想要的内容,请道歉

这个html页面中的数据嵌入在特定的结构中 我想拉数据忽略第一个块

但问题出在我做的时候 -

array_splice($store, $index, 1);

它还给了我第一个实际上是(不需要的html块)的块 -

self.tab = soup.findAll("div","listing-row") 

我没有使用

("div","listing-row wide-featured-listing")

因为我希望所有名为“listing-row 的类只在整个页面中。

如何忽略名为“list-row wide-featured-listing”的课程?

任何形式的帮助/指导表示赞赏。非常感谢!

2 个答案:

答案 0 :(得分:1)

或者,您可以使CSS selector与该类完全匹配listing-row

soup.select("div[class=listing-row]")

演示:

>>> from bs4 import BeautifulSoup
>>> 
>>> data = """
... <div>
...     <div class="listing-row">result1</div>
...     <div class="listing-row wide-featured-listing">result2</div>
...     <div class="listing-row">result3</div>
... </div>
... """
>>> 
>>> soup = BeautifulSoup(data, "html.parser")
>>> print [row.text for row in soup.select("div[class=listing-row]")]
[u'result1', u'result3']

答案 1 :(得分:0)

您可以过滤掉该元素:

self.tab = [el for el in soup.find_all('div', class_='listing-row')
            if 'wide-featured-listing' not in el.attr['class']]

您可以使用自定义功能:

self.tab = soup.find_all(lambda e: e.name == 'div' and
                                   'listing-row' in e['class'] and
                                   'wide-featured-listing' not in el.attr['class'])