BeautifulSoup: Comment puis-je extraire tous les & lt; li & gt; s d'une liste de & lt; ul & gt; s qui contient des & lt; ul & gt; s imbriqués?
Mon code source ressemble:
<h3>Header3 (Start here)</h3>
<ul>
<li>List items</li>
<li>Etc...</li>
</ul>
<h3>Header 3</h3>
<ul>
<li>List items</li>
<ul>
<li>Nested list items</li>
<li>Nested list items</li></ul>
<li>List items</li>
</ul>
<h2>Header 2 (end here)</h2>
J'aimerais que tous les "li" tags à la suite de la première "h3" de la balise et de s'arrêter à la prochaine "h2" balise, y compris tous imbriqués li balises.
firstH3 = soupe.find('h3')
correctement trouve l'endroit que je voudrais commencer.
firstH3 = soup.find('h3') # Start here
uls = []
for nextSibling in firstH3.findNextSiblings():
if nextSibling.name == 'h2':
break
if nextSibling.name == 'ul':
uls.append(nextSibling)
me donne une liste de ULs, chacun avec LI contenu que j'ai besoin.
EXTRAIT DE LA "uls" LISTE:
<ul>
...
<li><i><a href="/wiki/Agent_Cody_Banks" title="Agent Cody Banks">Agent Cody Banks</a></i> (2003)</li>
<li><i><a href="/wiki/Agent_Cody_Banks_2:_Destination_London" title="Agent Cody Banks 2: Destination London">Agent Cody Banks 2: Destination London</a></i> (2004)</li>
<li>Air Bud series:
<ul>
<li><i><a href="/wiki/Air_Bud:_World_Pup" title="Air Bud: World Pup">Air Bud: World Pup</a></i> (2000)</li>
<li><i><a href="/wiki/Air_Bud:_Seventh_Inning_Fetch" title="Air Bud: Seventh Inning Fetch">Air Bud: Seventh Inning Fetch</a></i> (2002)</li>
<li><i><a href="/wiki/Air_Bud:_Spikes_Back" title="Air Bud: Spikes Back">Air Bud: Spikes Back</a></i> (2003)</li>
<li><i><a href="/wiki/Air_Buddies" title="Air Buddies">Air Buddies</a></i> (2006)</li>
</ul>
</li>
<li><i><a href="/wiki/Akeelah_and_the_Bee" title="Akeelah and the Bee">Akeelah and the Bee</a></i> (2006)</li>
...
</ul>
Mais je ne suis pas sûr de l'endroit où aller à partir d'ici. Je suis un débutant programmeur en essayant de sauter dans le Python par la construction d'un script qui érafle http://en.wikipedia.org/wiki/2000s_in_film et extrait une liste de "Titre du Film (Année)".
Mise à jour:
Code Final:
lis = []
for ul in uls:
for li in ul.findAll('li'):
if li.find('ul'):
break
lis.append(li)
for li in lis:
print li.text.encode("utf-8")
La Si-->break jette de la LI qui contiennent UL depuis le imbriquée LI sont doublés.
Sortie d'impression est maintenant:
- 102 Dalmatiens(2000)
- 10 & Wolf(2006)
- 11:14(2006)
- 12:08 à l'Est de Bucarest(2006)
- 13 Going on 30(2004)
- 1408(2007)
- ...
Grâce
source d'informationauteur danneu
Vous devez vous connecter pour publier un commentaire.
.findAll()
fonctionne pour imbriquéeli
éléments:De sortie:
Une compréhension de liste pourrait fonctionner, trop.