我试图让所有事情都发生在' td'当class属性具有几个不同值之一时标记。
我知道如何在事实发生后使用BeautifulSoup这样做,但由于需要花费大量时间,我试图通过选择性地使用SoupStrainer解析每个页面来加快速度。我刚开始尝试以下但它似乎没有用。
strainer = SoupStrainer('td', attrs={'class': ['Value_One', 'Value_Two']})
soup = BeautifulSoup(foo.content, "lxml", parse_only=strainer)
有没有人知道如何使这项工作(它不必涉及SoupStrainer甚至美丽的汤)?
答案 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']