你如何使用Beautiful Soup来提取具有某些类属性的列表项?

时间:2014-01-29 03:19:46

标签: python html list beautifulsoup

如何使用Beautiful Soup提取具有某些类属性或没有某些clas属性的列表项?

例如,从下面的HTML中,我只想提取具有类属性“lev1”的列表项(即子项)。我还想提取没有类属性的列表项(即Parents),但是我想分别做这两件事(意思是我只想拉出具有class属性的列表项“lev1 “然后只拉出没有类属性的列表项。

<h3>HeaderName1<h3>
<ul class="prodoplist">
 <li>Parent</li>
 <li class="lev1">Child1</li>
 <li class="lev1">Child2</li>
 <li class="lev1">Child3</li>
  </ul>
  <h3>HeaderName2<h3>
   <ul class="prodoplist">
   <li>Parent2</li>
   <li class="lev1">Child1</li>
   <li class="lev1">Child2</li>
   <li class="lev1">Child3</li>
   </ul>

我的最终目标是制作这样的东西。

[[HeaderName1,Parent1,Child1],[HeaderName1,Parent1,Child2],[HeaderName1,Parent1,Child3],   [HeaderName2,Parent2,Child1],[HeaderName2,Parent2,Child2],[HeaderName2,Parent2,Child3]]

到目前为止我只有这个:

soup.h3.findNext('ul').contents

这就解决了这个问题:

 <li>Parent</li>
 <li class="lev1">Child1</li>
 <li class="lev1">Child2</li>
 <li class="lev1">Child3</li>
 <li>Parent2</li>
 <li class="lev1">Child1</li>
<li class="lev1">Child2</li>
<li class="lev1">Child3</li>

然后我应用了这个,但它给了我Child和Parent,当我想单独拉它们时

[x.text for x in duns_brands_html]

1 个答案:

答案 0 :(得分:1)

for h3 in soup.find_all('h3'):
    ul = h3.find_next_sibling('ul')
    lis = ul.findChildren('li')
    for i in range(3):
        print [h3.text, 
               lis[0].text, 
               lis[i].text]

输出:

[u'HeaderName1', u'Parent', u'Parent']
[u'HeaderName1', u'Parent', u'Child1']
[u'HeaderName1', u'Parent', u'Child2']
[u'HeaderName2', u'Parent2', u'Parent2']
[u'HeaderName2', u'Parent2', u'Child4']
[u'HeaderName2', u'Parent2', u'Child5']