2013-09-26 36 views
0

我最近從Beautifulsoup切換到lxml,因爲lxml可以使用破碎的HTML,這是我的情況。我想知道創建Beautifulsoup find()的等效或程序化形式。您在BS看到我能夠通過搜索這樣找到樹節點:Lxml相當於BeautifulSoup查找()

bs = BeautifulSoup(html) 
bs.find('span', {'class': 'some-class-name'}) 

LXML找到()只是在尋找,在樹中的當前水平,如果我想在所有的節點,以搜索什麼?

感謝

回答

2

您可以使用cssselect

root = lxml.html.fromstring(html) 
root.cssselect('span.some-class-name') 

xpath

root.xpath('.//span[@class="some-class-name"]') 

兩個cssselectxpath方法返回匹配元素的列表,像BeautifulSoup findAll/find_all方法。

1

如果你不想打擾學習lxmlxpath表達式的API,那麼這裏的另一種選擇:

來源:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

美麗的湯支持包含在Python的標準庫中的HTML解析器,但它也支持許多第三方Python解析器。一個是lxml的解析器[...]

,並指定一個特定的解析器使用方法:

BeautifulSoup(markup, "lxml")