2017-02-19 6 views
1

J'essaie de chercher une phrase de texte spécifique ('w/d dans l'unité') dans une table d'attributs dans une publication d'appartement Craiglist individuelle. La position de cette phrase peut varier en fonction du nombre d'autres attributs répertoriés dans cette table. Par exemple, 'w/d dans l'unité' peut être située:Python - boucler à travers une instruction FOR en utilisant 'continuer' (publication Craigslist)

  1. en position 3:

    • chats sont correctes;
    • les chiens sont ok;
    • w/d dans l'unité
  2. En position 2:

    • chats sont correctes;
    • w/d dans l'unité;
    • appartement

Pour tenir compte de la variabilité en position, mon code Python est écrit:

attr = response.xpath("//*[@class='attrgroup']/span") 

    for i in range (0, len(attr)): 
     if 'w/d in unit' in attr[i].xpath("text()").extract(): 
      item["washerDryer"] = attr[i].xpath("text()").extract() 
     else: 
      continue 

    return item 

Ma question est:

  1. Comment puis-je obtenir mon item["WasherDryer"] pour stocker la valeur "None" lorsque l'instruction if 'w/d in unit' in attr[i].xpath("text()").extract(): est false?
    Je pourrais le mettre sous l'instruction else(where item["WasherDryer"] = "None"), mais alors la boucle ne continuerait pas à itérer dans le prochain i.

Répondre

1

Vous pouvez utiliser extract_first et lui transmettre une valeur par défaut. Voici comment il peut être utilisé:

for i in range (0, len(attr)): 
    item["washerDryer"] = attr[i].xpath("text()").extract_first(default='None') 
+0

Merci! Cependant, ce changement n'a pas fonctionné. J'ai révisé mon code original hier et cela fonctionne maintenant (voir la réponse à la question ci-dessous). – slsu

+0

C'est agréable d'entendre ça! Veuillez poster un peu de fichier source la prochaine fois. Cela simplifierait grandement la tâche. Bonne journée! –

0

Je révisé mon code d'origine hier. J'ai réalisé que je devais d'abord déterminer si le texte «w/d in unit» existait avant de poursuivre l'itération.

Ce que nous faisons ici est:

1) Voir si le texte « w/d dans l'unité » apparaît quelque part dans la chaîne « attr » 2) Si oui, passez à itérer 3) Si non, puis étiqueter automatiquement l'élément ['washerDryer'] = 'Aucun'

 if 'w/d in unit' in str(attr): 
      for i in range (0, len(attr)): 
       if 'w/d in unit' in attr[i].xpath("text()").extract(): 
        item["washerDryer"] = attr[i].xpath("text()").extract() 
       else: 
        continue 
     else: 
      item["washerDryer"] = "None"