9
votes

Recevez Document DocType avec Beautifulsoup

Je viens de commencer à bricoler avec Scrapy en conjonction avec BEAUSUP et je me demande si je manque quelque chose de très évident mais je ne peux pas sembler comprendre comment obtenir le doctype d'un Document HTML retourné de l'objet à soupe résultant.

Compte tenu de la page HTML suivante: P>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en"> 
<head> 
<meta charset=utf-8 />
<meta name="viewport" content="width=620" />
<title>HTML5 Demos and Examples</title> 
<link rel="stylesheet" href="/css/html5demos.css" type="text/css" /> 
<script src="js/h5utils.js"></script> 
</head> 
<body>
<p id="firstpara" align="center">This is paragraph <b>one</b>
<p id="secondpara" align="blah">This is paragraph <b>two</b>.
</html>


0 commentaires

3 Réponses :


-1
votes

Vous pouvez simplement récupérer le premier élément du contenu de la soupe: xxx


2 commentaires

Soyez prudent, cette syntaxe se brisera si le DOCTYPE n'est pas le premier élément. Par exemple, lorsqu'il existe une déclaration XML en haut du document.


Cela pourrait rentrer quoi que ce soit, car Doctype pourrait être manquant et cela est souvent.



3
votes

Vous pouvez passer par des éléments de niveau supérieur et vérifier chacun pour voir s'il s'agit d'une déclaration. Ensuite, vous pouvez l'inspecter pour savoir quel type de déclaration est: xxx


0 commentaires

6
votes

Belle soupe 4 a une classe pour les déclarations de DOCTYPE. Vous pouvez donc l'utiliser pour extraire toutes les déclarations au niveau supérieur (bien que vous n'êtes pas sans doute en attendant un ou aucun!)

def doctype(soup):
    items = [item for item in soup.contents if isinstance(item, bs4.Doctype)]
    return items[0] if items else None


0 commentaires