Extraire le texte visible d'une page Web avec BeautifulSoup
De nombreuses tâches de web-scraping impliquent de récupérer le contenu textuel visible d'une page Web, à l'exclusion d'éléments tels que des scripts, commentaires et styles CSS. En utilisant BeautifulSoup, y parvenir peut être simple avec la bonne approche.
Un problème courant survient lors de l'utilisation de la fonction findAll(), car elle récupère tous les nœuds de texte, y compris ceux cachés dans des éléments indésirables. Pour résoudre ce problème, nous pouvons définir un filtre personnalisé pour exclure des balises et des commentaires spécifiques.
Le code suivant illustre cette approche :
from bs4 import BeautifulSoup from bs4.element import Comment import urllib.request def tag_visible(element): if element.parent.name in ['style', 'script', 'head', 'title', 'meta', '[document]']: return False if isinstance(element, Comment): return False return True def text_from_html(body): soup = BeautifulSoup(body, 'html.parser') texts = soup.findAll(text=True) visible_texts = filter(tag_visible, texts) return u" ".join(t.strip() for t in visible_texts) html = urllib.request.urlopen('http://www.nytimes.com/2009/12/21/us/21storm.html').read() print(text_from_html(html))
La fonction tag_visible vérifie si l'élément parent d'un texte Le nœud correspond à l'une des balises indésirables ou si le nœud est un commentaire. Les nœuds qui passent ce filtre sont ensuite utilisés pour combiner le texte visible en une seule chaîne en utilisant u" ".join(t.strip() for t in visible_texts).
Cette approche extrait efficacement uniquement le texte visible de une page Web, en laissant de côté les éléments inutiles comme les scripts et les commentaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!