Home > database >  Find specific pattern and remove tag containing pattern
Find specific pattern and remove tag containing pattern

Time:09-27

I'm trying to remove (delete) the whole tag if the tag contains a text pattern. The pattern in my case should be interesar: (colon included). This is my code:

from bs4 import BeautifulSoup
import requests
import time
import re
import json

url = "https://www.globi.site/sample/"
response = requests.get(url)
data = response.content
soup = BeautifulSoup(data, 'lxml')
soup.prettify()

head = soup.find('head')
title = soup.find(class_ = 'entry-title').text
article = soup.find(class_ = 'entry-content')

my_pattern = re.compile(r'.*interesar:.*')

patterns = article.find_all(my_pattern)
for pattern in patterns:
    pattern.decompose()

print(article)

When running...

print(patterns)

... the result is just [] (empty list). Not sure if the regex is right.

When my_pattern is found, I want to delete the whole containing tag. The pattern could be inside <p>, <h3>, <h4> or other HTML tags. There could also be multiple patterns on the same page enclosed in different tags.

What am I doing wrong?

CodePudding user response:

Use text= parameter with compiled regex:

from bs4 import BeautifulSoup
import requests
import time
import re
import json

url = "https://www.globi.site/sample/"
response = requests.get(url)
data = response.content
soup = BeautifulSoup(data, "lxml")

head = soup.find("head")
title = soup.find(class_="entry-title").text
article = soup.find(class_="entry-content")

my_pattern = re.compile(r".*interesar:.*")

patterns = article.find_all(text=my_pattern)
for pattern in patterns:
    pattern.parent.extract()

print(article)

Prints:

<div class="entry-content">
<p>El proceso de aprendizaje se extiende a lo largo de toda la vida de una persona y el Ministerio de Educación dispone de múltiples recursos para tal fin.</p>
<p>Un recurso didáctico es cualquier material que facilita al profesor su función: le ayuda a explicarse mejor para que los conocimientos lleguen de una forma más clara al alumno. Al poder ser cualquier material estamos hablando de vídeos, libros, gráficos, imágenes, actividades, películas, y cualquier elemento que se nos ocurra que pueda ayudar a la comprensión de una idea. <strong>Innovar en este aspecto es clave en el avance de la educación</strong>.</p>
<p>Una de estas fuentes de recursos de metodología didáctica es el Ministerio de Educación. En el apartado de <a href="http://www.mecd.gob.es/alv/recursos.html">recursos de su web</a> encontramos diferentes categorías, tales como ‘bancos de recursos’, ‘materiales’, ‘portales de orientación’, ‘portales TIC para la educación’ y ‘herramientas para el desarrollo de materiales’.</p>

<h2>Bancos de recursos</h2>
<p>En ‘Bancos de recursos’ hay diversas fuentes, la más interesante de ellas puede ser INTEF, el Banco de recursos del Instituto Nacional de Tecnologías Educativas y de Formación del Profesorado. En <strong>‘Materiales’</strong> encontramos también varias fuentes, pero URUK, un método que ha nacido en las aulas de alfabetización de adultos, nos puede resultar realmente útil a la hora de dirigirnos a la excelencia del profesorado.</p>
<p>‘Portales de orientación’ es imprescindible para ayudar a los alumnos a decidir su futuro, ya que en esta opción tenemos varias fuentes para guiar a alumnos en su porvenir educativo. En ‘Portales TIC para la educación’ encontramos <a href="https://www.uv.es/uvweb/master-investigacion-didactiques-especifiques/es/blog/recursos-didacticos-del-ministerio-educacion-1285958572212/cedec.educalab.es">CEDEC</a>, el Centro Nacional de Desarrollo Curricular en Sistemas no Propietarios. Su objetivo es la creación de materiales educativos de libre acceso que profundicen en la implantación de las Tecnologías de la Información y Comunicación en el Ámbito Educativo. En educaLAB tenemos datos y análisis desde la investigación, experimentación e innovación para ayudar tanto a profesores como al sistema educativo completo.</p>

<p>La última opción que encontramos en la web de recursos del Ministerio de Educación es ‘Herramientas para el desarrollo de materiales’, donde se localiza el proyecto Arquímedes (entre otros), que posibilita la creación de actividades interactivas del área de matemáticas de la ESO.</p>
<p>Todos estos recursos van dirigidos a la excelencia del profesorado, para que continúe formándose cada día, y también a la mejor comprensión del conocimiento por parte de los alumnos.</p>
</div>

CodePudding user response:

If I understand correctly, you might need a question mark for the end of the .* (match everything) so that it stops until interesar is matched:

my_pattern = re.compile(r'.*?interesar:.*')

Not:

my_pattern = re.compile(r'.*interesar:.*')

For me that gave me the result.

Edit:

Maybe instead of:

soup = BeautifulSoup(data, 'lxml')

You need:

soup = BeautifulSoup(data, 'html.parser')
  • Related