J'utilise XPath avec scrapy pour extraire du texte à partir de balises html en ligne, mais quand je le fais, je reçois des caractères supplémentaires. Un exemple est d'essayer d'extraire un nombre, comme "204" à partir d'un tag <td>
et obtenir [u'204']
. Dans certains cas, c'est bien pire. Par exemple en essayant d'extraire "1 - Mathoverflow" et d'obtenir à la place [u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t ']
. Y at-il un moyen d'empêcher cela, ou couper les chaînes de sorte que les caractères supplémentaires ne sont pas une partie de la chaîne? (en utilisant des éléments pour stocker les données). Il semble que cela a quelque chose à voir avec le formatage, alors comment puis-je obtenir xpath pour ne pas prendre ce genre de choses?Caractères supplémentaires Extrait avec XPath et Python (html)
Répondre
Qu'est-ce que la ligne de regard de code comme ça retourne [u'204']
? Il semble que ce qui est renvoyé est une liste Python contenant une chaîne unicode avec la valeur que vous voulez. Rien là-bas - juste un indice. En ce qui concerne les retours de chariot, les sauts de ligne et les onglets, comme Wai Yip Tung vient de répondre, la bande les enlèvera.
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())
Ok merci, cela a corrigé un peu, il semble prendre le tiret dans '1 - MathOverflow' comme une chaîne étrange' 'u 2013', et ascii ne peut pas le lire. En ce qui concerne le [u'204 '], je ne sais pas pourquoi xpath le met autour des données. L'instruction xpath est '// div [@ id =" content "]/div [@ id =" liste-répertoire "]/div [@ class =" wrapper "]/table/tr [@ class =" impair "] [1]/td [1]/text() ' – Kristin
Je pense que vous confondez ce qui est actuellement retourné avec la façon dont Python le rend quand il l'imprime à l'invite. Quand vous voyez '[u'204 ']' sur l'écran, ce n'est pas une chaîne qui commence par un caractère '['. Plutôt, c'est comme cela que Python vous dit qu'il vous montre un objet liste qui contient une seule chaîne unicode. La valeur à l'intérieur de cette chaîne unicode est les trois caractères '2',' 0' et '4'. Ce qui est exactement ce que vous voulez. Le code que je vous ai montré devrait déballer ça pour vous. –
De même, Python ne remplace pas le tiret avec la chaîne '\ u2013'. Plutôt, c'est juste de vous montrer que la chaîne Unicode qui a été retournée contient le caractère au point de code 2013. Ce qui, vous ne serez pas surpris de l'apprendre, est le codepoint pour "EN DASH". Python ne modifie pas la chaîne, il retourne exactement ce qu'il y a dans le navigateur. Si vous voulez supprimer le caractère non-ascii, ce thread récent vous aidera: http://stackoverflow.com/questions/2854230/whats-the-fastest-way-to-strip-and-replace-a-document-of -high-unicode-characters –
Utilisez la bande() pour supprimer les espaces blancs avant et arrière.
>>> u'\r\n\t\t 1 \u2013 MathOverflow\r\n\t\t '.strip()
u'1 \u2013 MathOverflow'
comment ferais-je cela dans le programme? puis-je juste écrire 'item1 ['Title'] = item1 ['title']. strip()' ,? Je suis nouveau à python. – Kristin
Oui, en supposant que item1 ['title'] est une chaîne. –
La fonction standard XPath normalize-space()
a exactement l'effet recherché.
Il supprime les espaces de début et de fin et remplace tout espace intérieur par un seul espace.
Ainsi, vous pouvez utiliser:
normalize-space(someExpression)
Ah ok, alors comment va la syntaxe? ('normalize-space (// div [@ id = "content"]/div [@ id = "répertoire-liste"]/div [@ class = "wrapper"]/table') items = [] ') correct? – Kristin
@Nacari: Ceci est une expression XPath correcte: 'normaliser-espace (// div [@ id =" contenu "]/div [@ id =" répertoire-liste "]/div [@ class =" wrapper " ]/table) –
- 1. extrait xpath
- 2. Extrait extrait de HTML avec Ruby?
- 3. XPath et caractères spéciaux
- 4. Extrait HTML dans Zend_Form
- 5. Etranges caractères supplémentaires dans html rendu sur IE 8
- 6. XML -. Imprime python lignes supplémentaires
- 7. Python: Tableaux PSP et HTML
- 8. cordes Extrait en python
- 9. Extrait href de html avec jQuery
- 10. python libxml2dom XPath question
- 11. Extrait Regex html Corps
- 12. Python: Extrait HTML à partir d'un fichier XML
- 13. liens Extrait de HTML
- 14. Regex: ignorer des caractères supplémentaires
- 15. strcat(); l'impression de caractères supplémentaires
- 16. Interroger le tag html avec XPath
- 17. Analyse du code HTML avec XPath/XMLHttpRequest
- 18. Caractères et symboles en HTML
- 19. Possible d'analyser ce code HTML avec xpath?
- 20. Parse HTML doc avec HtmlAgilityPack-Xpath, RegExp
- 21. Tableau Python et HTML
- 22. Générateur Xpath en Python
- 23. Essayer de créer XPath à partir de cet extrait de code HTML
- 24. Trouvez un élément et renvoyez le XPath en utilisant Python
- 25. Caractères supplémentaires non reconnus dans le fichier analysé avec php
- 26. Chaîne Python avec HTML/
- 27. typeid() retourne des caractères supplémentaires en g ++
- 28. beautifulsoup python ajouter des balises supplémentaires fin
- 29. expression régulière: extrait les 2 derniers caractères
- 30. Système de fichiers Python et Windows avec caractères non-ascii
Cela nous aiderait beaucoup si vous pouvez fournir un exemple de code autonome complet qui reproduit vos problèmes. Nous essayons de deviner ce que vous faites. –