Question

J'utilise XPath avec scrapy au texte extrait de balises html en ligne, mais quand je fais je reçois des caractères supplémentaires attachés. Un exemple tente d'extraire un certain nombre, comme « 204 » d'une étiquette de <td> et obtenir [u'204']. Dans certains cas, son bien pire. Par exemple en essayant d'extraire « 1 - mathoverflow » et au lieu se [u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t ']. Y at-il un moyen d'éviter cela, ou couper les cordes pour que les caractères supplémentaires ne coûtent pas une partie de la chaîne? (À l'aide d'articles à stocker les données). On dirait qu'il a quelque chose à voir avec le formatage, alors comment puis-je obtenir XPath pour ne pas prendre ce genre de choses?

Était-ce utile?

La solution

Qu'est-ce que la ligne de regard de code comme celui des retours [u'204']? On dirait que ce qui est renvoyé est une liste Python contenant une chaîne de caractères Unicode avec la valeur que vous voulez. Rien wront là - juste indice. En ce qui concerne les retours chariot, sauts de ligne et des onglets, comme Tung Wai Yip vient de répondre, la bande va les prendre.

Probablement

my_answer = item1['Title'][0].strip()

Ou si vous attendez plusieurs matchs

for ans_i in item1['Title']:
    do_something_with( ans_i.strip() )

Autres conseils

La fonction standard XPath normalize-space() a exactement l'effet voulu.

Il supprime la tête et de queue de Wite et remplace les espaces blancs intérieure avec un seul espace.

Alors, vous pouvez utiliser :

normalize-space(someExpression)

Utilisation bande () pour supprimer l'attaque et de fuite des espaces blancs.

>>> u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t '.strip()
u'1 \u2013 MathOverflow'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top