How do you find all list items between two tags with BeautifulSoup?

beautifulsoup, python

Solution

using findChildren like:

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

output:

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>

however, as in most cases lxml and xpath is a superior solution:

from lxml import html
doc = html.parse('input.html')
print [ul.xpath('li[1] | li[2] | li[3]') for ul in doc.xpath('//ul')]

Problem

For example, I'd like to pull out only Child1, Child2, and Child3 out of the below list where it is after the first instance of h3 and before the next tag of 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> ```

Original source