Comment puis-je bande les balises de commentaires HTML à l'aide de BeautifulSoup?
J'ai été jouer avec BeautifulSoup, ce qui est excellent. Mon objectif final est d'essayer et obtenir tout le texte à partir d'une page. Je suis juste essayer d'obtenir le texte de corps, avec un cas particulier pour obtenir le titre et/ou les attributs alt de <a>
ou <img>
balises.
Pour l'instant j'ai ce EDITED & UPDATED CURRENT CODE
:
soup = BeautifulSoup(page)
comments = soup.findAll(text=lambda text:isinstance(text, Comment))
[comment.extract() for comment in comments]
page = ''.join(soup.findAll(text=True))
page = ' '.join(page.split())
print page
1) Que suggérez-vous de la meilleure façon, pour mon cas particulier de ne PAS exclure les attributs des deux balises que j'ai énumérés ci-dessus? Si elle est trop complexe pour ce faire, il n'est pas aussi important que de faire #2.
2) je voudrais bande<!-- -->
balises et tout entre les deux. Comment pourrais-je aller à ce sujet?
QUESTION EDIT
@jathanism: Voici quelques balises de commentaire que j'ai essayé à la bande, mais rester, même si j'utilise votre exemple
<!-- Begin function popUp(URL) { day = new Date(); id = day.getTime(); eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=300,height=330,left = 774,top = 518');"); } // End -->
<!-- var MenuBar1 = new Spry.Widget.MenuBar("MenuBar1", {imgDown:"SpryAssets/SpryMenuBarDownHover.gif", imgRight:"SpryAssets/SpryMenuBarRightHover.gif"}); //--> <!-- var MenuBar1 = new Spry.Widget.MenuBar("MenuBar1", {imgDown:"SpryAssets/SpryMenuBarDownHover.gif", imgRight:"SpryAssets/SpryMenuBarRightHover.gif"}); //--> <!-- var whichlink=0 var whichimage=0 var blenddelay=(ie)? document.images.slide.filters[0].duration*1000 : 0 function slideit(){ if (!document.images) return if (ie) document.images.slide.filters[0].apply() document.images.slide.src=imageholder[whichimage].src if (ie) document.images.slide.filters[0].play() whichlink=whichimage whichimage=(whichimage<slideimages.length-1)? whichimage+1 : 0 setTimeout("slideit()",slidespeed+blenddelay) } slideit() //-->
Source supplémentaire de jouer avec.
OriginalL'auteur Nathan | 2010-08-17
Vous devez vous connecter pour publier un commentaire.
Cela peut être un problème avec l'analyseur SGML: voir http://www.crummy.com/software/BeautifulSoup/documentation.html#Sanitizing%20Bad%20Data%20with%20Regexps. Vous pouvez l'écraser à l'aide d'un
markupMassage
regex -- directement à partir de la documentation:OK je vais travailler sur le re.compiler pour détecter les foiré les commentaires que j'ai énumérés. Besoin de rafraîchir ma regex est bien. blech.
BeautifulSoup utilise plusieurs regexes en interne pour polir le HTML avant de l'alimente
sgmllib
. C'est pas joli, mais ce n'est pas Lovecraftian.Juste pour mettre à jour ce vieux post, le BeautifulSoup.MARKUP_MASSAGE a été désapprouvée. "La BeautifulSoup constructeur ne reconnaît plus le markupMassage argument. C'est maintenant l'analyseur responsabilité de balisage correctement." crummy.com/software/BeautifulSoup/bs4/doc (tout En bas de la page)
OriginalL'auteur Katriel
Directement à partir de la documentation pour BeautifulSoup, vous pouvez facilement supprimer les commentaires (ou autre) à l'aide de
extract()
:Nice. Mais il semble tout de dégueulasse de faire une liste de compréhension avec les effets secondaires :p. Que diriez -
map( lambda x: x.extract(), comments )
?Je suis encore à essayer de comprendre pourquoi il ne trouve pas et la bande des balises comme ceci
<!-- //-->
Ces barres obliques inverses cause de certaines balises à négligerA quelque chose de changé dans BeautifulSoup? J'ai essayé avec 3.2.0 et il n'a aucun problème avec les commentaires comme
<!-- //-->
.OriginalL'auteur jathanism