2012-07-17 104 views
2

我有一个HTML文件,该文件类似于这样的东西:如何使用beautifulsoup提取嵌套标记结构中的属性值?

<html> 
... 
<li class="not a user"> </li> 
<li class="user"> 
<a href="abs" ...> </a> 
</li> 
<li class="user"> 
<a href="bss" ...> </a> 
</li> 
... 
</html> 
鉴于上述输入我想带class =“用户”解析里的标签,并获得HREF的作为输出的值

。这可能在python中使用beautifulsoup?

我的解决办法是:

data="the above html code snippet" 
soup=BeautifulSoup(data) 
listset=soup("li","user") 
for list in listset: 
    attrib_value=[a['href'] for a in list.findAll('a',{'href':True})] 

很显然,我的地方,它只是列出了最近锚标记的href属性值有一个错误。

+0

你为什么要在每个循环中重复设置attrib_value?每次迭代你都在做什么? – 2012-07-17 00:33:18

+0

问题是当我想要一个属性值列表时,我只是在每次迭代时重新分配! :P – abhixec 2012-07-17 19:19:22

回答

2

你的代码没问题。在listset中有三个元素 - 并且attrib_value会在循环的每次迭代中被覆盖,因此在程序结束时,它只包含listset的最后一个元素(即bss)中的href值。

试试这个,而不是把所有的值:

attrib_value += [a['href'] for a in list.findAll('a',{'href':True})] 

和环路(attrib_value = [])之前初始化attrib_value为空列表。

+0

啊... thankssssss很多..我知道我错过了什么:) – abhixec 2012-07-17 00:37:57

+0

不客气 - 祝你好运。 – Ansari 2012-07-17 00:39:16