Beautifulsoup, de frère, de structure avec les balises br
Je suis en train d'analyser un document HTML à l'aide de la BeautifulSoup bibliothèque Python, mais la structure devient déformée par <br>
balises. Laissez-moi juste vous donner un exemple.
D'entrée HTML:
<div>
some text <br>
<span> some more text </span> <br>
<span> and more text </span>
</div>
HTML que BeautifulSoup interprète:
<div>
some text
<br>
<span> some more text </span>
<br>
<span> and more text </span>
</br>
</br>
</div>
Dans la source, les travées pourraient être considérés comme frères et sœurs. Après l'analyse (à l'aide de l'analyseur par défaut), les travées sont tout à coup plus les frères et sœurs, comme les balises br est devenu une partie de la structure.
La solution je pense pour résoudre ce problème est de dépouiller le <br>
étiquettes au total, avant de verser le code html sur Beautifulsoup, mais ça ne semble pas très élégant, comme il m'oblige à modifier l'entrée. Ce est une meilleure façon de résoudre ce problème?
- Devrait-il y avoir deux balises span là, vous semblez avoir
<span
- Même la fixation de la durée, j'ai recréé l'erreur à l'aide bs4. bs3, cependant, n'a pas de problèmes.
- En effet. La plage était une faute de frappe, et pas dans mon code. dilbert est correct.
Vous devez vous connecter pour publier un commentaire.
Votre meilleur pari est de
extract()
les sauts de ligne. Il est plus facile que vous le pensez :).<br>
et</br>
sont en fait la même chose. Ce n'est pas l'une de ces balises que vous ouvrir/fermer (je ne suis pas un expert en HTML). La seule différence, je pense, est que ce dernier est obsolète, mais ne pas me citer.<br>
et<br />
, c'est pourquoi il m'a beaucoup surpris que BS permettrait d'ajouter une balise de fermeture (c'est à dire</br>
).Vous pouvez aussi faire quelque chose comme ça:
C'est une super vieille question, mais j'ai juste eu un problème similaire parce que mon document contenait closong
</br>
balises. De ce fait, des blocs massifs de document ont été tout simplement ignorés par les beatifulsoup ( bs essayer de faire face à une balise de fermeture, je suppose.)soup.find_all('br')
n'a pas fait de trouver quoi que ce soit car il n'y avait pas d'ouverturebr
marque, de sorte que je ne pouvais pas utiliser leextract()
méthode.Après le dénigrement de ma tête pendant une heure, j'ai trouvé que l'utilisation de
lxml
analyseur de html par défaut réglé le problème.soup = BeautifulSoup(page, 'lxml')