2 votes

Extraction de texte à partir de balises imbriquées dans un XML à l'aide de BeautifulSoup en python

J'essaie d'extraire le texte des balises imbriquées, par exemple le xml est dans le formulaire :

<thread id = 1_1>
  <post id = 1>
    <title>
      <ne>MediaPortal</ne> Install Guide
    </title>
    <content>
      <ne>MediaPortal</ne> Install Guide 0. Introduction and pre-requisites 
      <ne>MediaPortal</ne> is an open-source and free full-fledged <ne>HTPC</ne>
      front-end. It does everything you can ask for in a media center: video 
      playback, music playback, photo viewing, weather, TV tuning and recording, 
      etc. It has wide community support and thanks to it's excellent plug-in 
      and  skinning framework, there are lots of community-developed extensions 
      you can  pick and choose to make it your own. It is far more configurable 
      than <ne>Windows Media Center</ne>, and it works out-of-the-box with the 
      <ne>MCE</ne> remote. And because it provides so much more configuration 
      some find it a daunting task to install and configure. Therefore, this 
      guide will help alleviate some of that burden and help get a 
      <ne>MediaPortal</ne> installation up &amp; running. This guide is not 
      intended to replace the wonderful <ne>MediaPortal</ne> documentation, but 
      rather to introduce the AVS community to <ne>MediaPortal</ne> and provide
      a quick and easy set-up guide. If you need more details on configuration
    </content>
  </post>
</thread>

J'ai besoin d'extraire des données dans les balises et de les enregistrer dans un fichier séparé. J'y parviens, puis j'extrais les balises de l'objet " beautiful soup ". Maintenant, je veux extraire le texte des balises et le mettre dans un fichier séparé. Veuillez me donner une idée de la manière dont je peux y parvenir.

Après avoir extrait les balises de l'objet soupe, si je fais

for title in soup.find('title')
   print title.string

alors il donne None sur la console pour les balises de titre ayant des balises avant d'extraire les balises.

1voto

jcollado Points 18325

De BeautifulSoup documentation :

For your convenience, if a tag has only one child node,
and that child node is a string,the child node is made
available as tag.string, as well as tag.contents[0].

Cependant, dans votre cas :

>>> t = soup.find('title')
<title><ne>MediaPortal</ne> Install Guide</title>

Par conséquent, dans votre cas, vous ne pouvez pas utiliser tag.string . Cependant, vous pouvez toujours utiliser tag.contents o tag.text :

>>> t.contents
[<ne>MediaPortal</ne>, u' Install Guide']
>>> t.text
u'MediaPortalInstall Guide'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X