Actualmente estoy tratando de eliminar el nombre de un producto de un sitio web, sin embargo, el texto está contenido en una etiqueta que nunca había visto antes y, por lo tanto, no sé cómo sacar el texto.

<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy 
Jacket</h1>

Estoy tratando de obtener el nombre "Gradient Puffy Jacket" para que sea accesible desde mi programa con la hermosa sopa 4 usando Python 2.7. Agradecería cualquier idea ya que esto me ha dejado perplejo durante varios días.

1
Colin 26 feb. 2018 a las 21:00

4 respuestas

La mejor respuesta

Puedes usar BeautifulSoup:

from bs4 import BeautifulSoup as soup
s = """
 <h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy Jacket</h1>
"""
new_s = soup(s, 'lxml').find('h1', {'itemprop':'name'}).text

Salida:

u'Gradient Puffy Jacket'
2
Ajax1234 26 feb. 2018 a las 18:05

Con la ayuda de find en beautifulsoup

soup = BeautifulSoup(html, "html.parser")
print soup.find('h1',{'class':'protect'}).text
0
xyz 27 feb. 2018 a las 05:42

Agregando a la respuesta de Ajax1234. Si está buscando a través de otros atributos html:

from bs4 import BeautifulSoup
s = """
<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy Jacket</h1>
"""
soup = BeautifulSoup(s, 'html.parser')

print(soup.find('h1', {'class': 'protect'}).text)
print(soup.find('h1', {'data-category': 'Jackets'}).text)
print(soup.find('h1', {'data-ino': 'SS18J42'}).text)

Etcetera...

0
Sebastian 26 feb. 2018 a las 18:13

BeautifulSoup le permite acceder a elementos utilizando atributos, por lo que podría utilizar el siguiente enfoque:

from bs4 import BeautifulSoup

html = """<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy 
Jacket</h1>"""

soup = BeautifulSoup(html, "html.parser")
print soup.h1.text
0
Martin Evans 26 feb. 2018 a las 18:21