una tutorial scraping pagina medium extraer ejemplos datos python html beautifulsoup html-parsing lxml

python - tutorial - BeautifulSoup excluye el contenido dentro de una determinada etiqueta(s)



scraping beautifulsoup python (2)

Encuentre y únase a todos los nodos de texto en la etiqueta p y compruebe que su padre no es a etiqueta a:

p = soup.find("td", {"id": "overview-top"}).find("p", {"itemprop": "description"}) print ''''.join(text for text in p.find_all(text=True) if text.parent.name != "a")

Demostración (no ver el link text impreso):

>>> from bs4 import BeautifulSoup >>> >>> data = """ ... <td id="overview-top"> ... <p itemprop="description"> ... text1 ... <a href="google.com">link text</a> ... text2 ... </p> ... </td> ... """ >>> soup = BeautifulSoup(data) >>> p = soup.find("td", {"id": "overview-top"}).find("p", {"itemprop": "description"}) >>> print p.text text1 link text text2 >>> >>> print ''''.join(text for text in p.find_all(text=True) if text.parent.name != "a") text1 text2

Tengo el siguiente elemento para encontrar el texto en un párrafo:

soup.find("td", { "id" : "overview-top" }).find("p", { "itemprop" : "description" }).text

¿Cómo excluiría todo el texto dentro de una etiqueta <a> ? Algo como in <p> but not in <a> ?


Usando lxml,

import lxml.html as LH data = """ <td id="overview-top"> <p itemprop="description"> text1 <a href="google.com">link text</a> text2 </p> </td> """ root = LH.fromstring(data) print(''''.join(root.xpath( ''//td[@id="overview-top"]//p[@itemprop="description"]/text()'')))

rendimientos

text1 text2

Para obtener también el texto de etiquetas secundarias de <p> , solo use una doble barra diagonal hacia adelante, //text() , en lugar de una sola barra diagonal:

print(''''.join(root.xpath( ''//td[@id="overview-top"]//p[@itemprop="description"]//text()'')))

rendimientos

text1 link text text2