BeautifulSoup: il suffit de pénétrer à l'intérieur d'une balise, n'importe comment beaucoup d'enfermer les tags il y a
Je suis en train de gratter tous les intérieurs html à partir de la <p>
éléments dans une page web à l'aide de BeautifulSoup. Il y a des balises internes, mais je n'aime pas, je veux juste que l'intérieur du texte.
Par exemple, pour:
<p>Red</p>
<p><i>Blue</i></p>
<p>Yellow</p>
<p>Light <b>green</b></p>
Comment puis-je extraire:
Red
Blue
Yellow
Light green
Ni .string
ni .contents[0]
fait ce dont j'ai besoin. Ni ne .extract()
, parce que je ne veux pas avoir à spécifier les balises internes à l'avance - je veux parler avec n'importe qui peut se produire.
Est-il "juste obtenir le visible HTML" type de méthode de BeautifulSoup?
----Mise à JOUR------
Sur des conseils, essayer:
soup = BeautifulSoup(open("test.html"))
p_tags = soup.findAll('p',text=True)
for i, p_tag in enumerate(p_tags):
print str(i) + p_tag
Mais ça n'aide pas - il imprime:
0Red
1
2Blue
3
4Yellow
5
6Light
7green
8
Vous devez vous connecter pour publier un commentaire.
Réponse courte:
soup.findAll(text=True)
Cela a déjà été répondu, ici sur StackOverflow et dans le BeautifulSoup documentation.
Mise à JOUR:
À préciser, un morceau de code:
.findAll(text=True)
pour obtenir ce que vous voulez.node.findAll(text=True)[0]
trop'<a href="http://abc.xyz.com/"><span>Business<i class="sample-class"></i></span></a>'
que les données pour BeautifulSoup(). Il ne fonctionne plus.<p>
marque, de sorte que le code de la réponse n'a aucune chance de fonctionner. Votre commentaire doit avoir été publié en tant que question distincte, bien que.Accepté la réponse est grand, mais il est de 6 ans maintenant, voici donc le courant Belle Soupe 4 version de cette réponse:
Normalement les données de rebut, à partir du site web contient des balises.Pour éviter que les étiquettes et les afficher uniquement le contenu du texte, vous pouvez utiliser le texte de l'attribut.
Par exemple,
Dans cet exemple, je collectionne tous les paragraphes de python site et l'afficher avec des balises et sans balises.
D'abord de convertir le html d'une chaîne à l'aide de
str
. Ensuite, utilisez le code suivant avec votre programme:Ce qui est appelé un
regex
. Celui-ci va supprimer tout ce qui vient entre les deux balises html (y compris les balises).