如何使用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]
答案 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']