Chr*_*ris 6 python beautifulsoup
例如,我只想从下面的列表中取出 Child1、Child2 和 Child3,它位于 h3 的第一个实例之后和 h3 的下一个标签之前
<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">Child4</li>
<li class="lev1">Child5</li>
<li class="lev1">Child6</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
使用 findChildren 喜欢:
for ul in soup.find_all('ul'):
print 'ul start'
for idx, li in enumerate(ul.findChildren('li')):
if idx in range(3):
print li
Run Code Online (Sandbox Code Playgroud)
输出:
ul start
<li>Parent</li>
<li class="lev1">Child1</li>
<li class="lev1">Child2</li>
ul start
<li>Parent2</li>
<li class="lev1">Child4</li>
<li class="lev1">Child5</li>
Run Code Online (Sandbox Code Playgroud)
然而,在大多数情况下,lxml 和 xpath是一个很好的解决方案:
from lxml import html
doc = html.parse('input.html')
print [ul.xpath('li[1] | li[2] | li[3]') for ul in doc.xpath('//ul')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4859 次 |
| 最近记录: |