2017-07-17 28 views
0

當類屬性具有幾個不同的值之一時,我試圖獲取所有'td'標記的出現。使用SoupStrainer和BeautifulSoup獲取具有多個屬性的所有標記

我知道如何使用BeautifulSoup做到這一點後,但由於需要花費的時間,我試圖通過有選擇地解析每個頁面使用SoupStrainer來加速它。我起初嘗試了下面的內容,但似乎並不奏效。

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

有誰知道一個辦法,使這項工作(它沒有涉及SoupStrainer甚至美味的湯)?

+0

用'湯= BeautifulSoup(urllib2.urlopen(URL), 'LXML')''然後soup.find_all( 'TD'))'應該找到所有''​​標籤,不是嗎? – davedwards

+0

是的,我知道。但我只試圖解析文檔的一部分(具有少數可能的類屬性值的td標籤)。你的答案解析整個事物,然後選擇td標籤。我想一步完成它。 – Hobbit36

回答

0

當然,這取決於你的意思。您可能可以使用scrapy,它使您能夠制定xpath表達式,例如此處使用的表達式。它利用了這兩個屬性相似的事實。有很多其他的選擇方式可供選擇。

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