2010-11-22 33 views
2

En python, comment préserver les paragraphes (c'est-à-dire conserver les retours à la ligne) lors de l'utilisation de lxml.html?Python conservant les nouvelles lignes dans lxml.html après cssselect et text_content()

Par exemple, ce qui suit bande <p> </p > balises et rejoindre les lignes, ce qui est pas ce que je veux:

body = doc.cssselect("div.body")[0] 
content = body.text_content() 

Voici ce que j'ai essayé qui ne fonctionne pas:

  • lxml.html.clean.clean_html:
    • ne conservera pas les nouvelles lignes.
  • content.replace (" "* 3," \ n \ n"):
    • ne fonctionne pas toujours, parce que texte combiné n'a pas le même nombre de places.

Répondre

1

Le lxml text_content fait ce qui est censé, selon les documents, il se déshabille les balises html et en laissant le texte derrière.

Vous pouvez résoudre ce problème en ajoutant vos propres retours à la ligne avant de sortir le contenu.

body = doc.cssselect("div.body")[0] 
for para in body.xpath("*//p"): 
    para.text = "\n%s\n" % para.text 
content = body.text_content() 
print content 
+0

Merci, voilà ce que je fini par faire: paragraphes = self.doc.cssselect ('div # corps p') paragraph_text = [paragraph.text_content() du paragraphe aux paragraphes] content = « \ n \ n'.join (paragraph_text) – Lionel

+0

'body.xpath (" * // p ")' ne fonctionne pas pour moi, je l'ai changé en 'body.xpath (" ./ p ")'. +1 de toute façon –