2014-03-03 52 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

相关问题