2014-03-03 50 views
0

我給出了一個HTML網址,從中我需要根據不同的標籤和屬性值選擇不同的元素。我需要使用lxml作爲我的任務的一部分。我很流利BeautifulSoup在lxml中查找特定標籤或屬性值的所有條目

在beautifulsoup,達到同樣的,我們可以用

k = soup.findAll('tagname')

這裏soup

<someRandomTag>...</someRandomTag> 
    <someTag> 
<tagName>entry 1</tagName> 
<tagName>entry 2</tagName> 
<tagName>entry 3</tagName> 
<tagName>entry 4</tagName> 
</someTag> 

這裏與標籤 '標記名' 的所有條目,則返回一個列表到k 。 lxml中是否有與此相同的內容?

我知道Xpath,就像tags=doc.xpath('descendant::*[@attrib1="atrtribval"]')一樣。

但我想知道有沒有其他方法?

回答

1

另外findall

In [645]: t=''' 
    ...: <someTag> 
    ...: <tagName>entry 1</tagName> 
    ...: <tagName>entry 2</tagName> 
    ...: <tagName>entry 3</tagName> 
    ...: <tagName>entry 4</tagName> 
    ...: </someTag> 
    ...: ''' 

In [646]: etree.fromstring(t) 
Out[646]: <Element someTag at 0x11ff3918> 

In [647]: stag=etree.fromstring(t) 

In [648]: stag.findall('tagName') 
Out[648]: 
[<Element tagName at 0x11ff38a0>, 
<Element tagName at 0x11ff3f80>, 
<Element tagName at 0x11ff3ad0>, 
<Element tagName at 0x11ff3da0>] 
+0

'lxml.etree.findall'是從'BeautifulSoup.findall'不同。 'lxml.etree.findall('tagName')'只查找子節點,不查找節點,也不查找節點本身。 'lxml.etree.findall('.// tagName')'找到後代,但是再次找不到節點本身。 – falsetru

相關問題