使用SoupStrainer和BeautifulSoup获取具有多个属性的所有标记

时间:2017-07-17 21:29:55

标签: python-3.x beautifulsoup

我试图让所有事情都发生在' td'当class属性具有几个不同值之一时标记。

我知道如何在事实发生后使用BeautifulSoup这样做,但由于需要花费大量时间,我试图通过选择性地使用SoupStrainer解析每个页面来加快速度。我刚开始尝试以下但它似乎没有用。

strainer = SoupStrainer('td', attrs={'class': ['Value_One', 'Value_Two']})
soup = BeautifulSoup(foo.content, "lxml", parse_only=strainer)

有没有人知道如何使这项工作(它不必涉及SoupStrainer甚至美丽的汤)?

1 个答案:

答案 0 :(得分:0)

当然,取决于你的意思。您可以使用scrapy,这使您能够制定xpath表达式,例如此处使用的表达式。它利用了两个class属性相似的事实。还有许多其他的选择方法。

>>> from scrapy.selector import Selector
>>> selector = Selector(text=open('temp.htm').read())
>>> selector.xpath('.//td[contains(@class,"Value")]/text()').extract()
['value one', 'value two']