2017-08-31 3 views
1

Je souhaite que les noms de films disponibles entre l'identifiant "tracked_by" et l'identifiant "buzz_off" soient disponibles. J'ai déjà créé un sélecteur qui peut saisir des noms après l'ID "tracked_by". Cependant, mon intention est de laisser le script faire l'analyse jusqu'à ce qu'il trouve "buzz_off" id. Les éléments dans lequel les noms sont:Quelque chose de similaire à "jusqu'à" dans le sélecteur CSS?

html = ''' 
<div class="list"> 
    <a id="allow" name="allow"></a> 
<h4 class="cluster">Allow</h4> 
<div class="base min"><a href="...">Sally</a></div> 
<div class="base max"><a href="..">Blood Diamond</a></div> 
    <a id="tracked_by" name="tracked_by"></a> 
<h4 class="cluster">Tracked by</h4> 
<div class="base min"><a href="..">Gladiator</a></div> 
<div class="base max"><a href="..">Troy</a></div> 
    <a id="buzz_off" name="buzz_off"></a> 
<h4 class="cluster">Buzz-off</h4> 
<div class="base min"><a href="..">Heat</a></div> 
<div class="base max"><a href="..">Matrix</a></div> 
</div> 
''' 

from lxml import html as htm 
root = htm.fromstring(html) 
for item in root.cssselect("a#tracked_by ~ div.base a"): 
    print(item.text) 

Le sélecteur j'ai essayé avec (également mentionné dans le script ci-dessus):

a#tracked_by ~ div.base a 

Résultats J'ayant:

Gladiator 
Troy 
Heat 
Matrix 

Résultats Je voudrais:

Gladiator 
Troy 

Btw, je voudrais analyser les noms en utilisant ce sélecteur pour ne pas styler.

+0

[Impossible de faire avec un sélecteur.] (Https://stackoverflow.com/questions/13330757/how-can-i-target-a-specific-group-of-siblings-in-a-flat-hierarchy/13330785 # 13330785) Vous aurez besoin de code supplémentaire pour cela. – BoltClock

Répondre

0

this est une référence pour les sélecteurs css. Comme vous pouvez le voir, il n'y a aucune forme de logique, car ce n'est pas un langage de programmation. Vous devrez utiliser une boucle while not en python et gérer chaque élément un à la fois, ou les ajouter à une liste.

+1

Merci pour votre réponse, Treehee. Si tel est le cas alors je ne pense pas qu'il soit nécessaire d'emprunter une quelconque logique à Python pour y faire face; au lieu de cela, j'irais facilement pour xpath en utilisant cette expression "//div[./preceding-sibling::h4[1]='Tracked par '] // text()" qui est capable de servir le but juste très bien. Comme je préfère le sélecteur de CSS dans la plupart des cas tout en raclant des données du Web, je voudrais apprendre que c'est la limitation aussi bien. Merci. – SIM