Quiero extraer el "clima 8/17/2019 2:00 PM" de la etiqueta HTML 'a' que se muestra a continuación. Escribí un código que pensé que extraería todo el texto de la etiqueta 'a' y más tarde, extraeré la subcadena deseada usando operaciones de cadena.
<div class="topic">
<a class="class_a" href="/href_1" data1="" data2="hello" data3="Hi" date="Monday, August 17" time="2:00 PM" topic="climate 8/17/2019 2:00 PM">
<span>2:00 PM</span>
<i class="Afternoon"></i>
</a>
</div>
Ejecuté el código a continuación y el resultado fue:
2:00 PM
También cambié las líneas como se muestra a continuación y no ayudó. bar = topics.find('a')
a bar = topics.find('a', {"class": "class_a"})
Verifiqué que el tipo de la variable de barra es la clase bs4.element.Tag
(no una cadena)
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen('https://tbd.com')
bs = BeautifulSoup(html.read(), 'html.parser')
topics = bs.findAll("div", {"class": "topic"})
for topic in topics:
bar = topic.find('a')
print (bar.text)
4 respuestas
Si ya conoce la clase del elemento del que desea extraer el texto, puede obtener el valor de sus propiedades como cualquier código de Python:
from bs4 import BeautifulSoup
h = """<div class="topic">
<a class="class_a" href="/href_1" data1="" data2="hello" data3="Hi" date="Monday, August 17" time="2:00 PM" topic="climate 8/17/2019 2:00 PM">
<span>2:00 PM</span>
<i class="Afternoon"></i>
</a>
</div>"""
soup = BeautifulSoup(h, "lxml")
obj = soup.find('a', class_ = "class_a")
print(obj.get('topic'))
#climate 8/17/2019 2:00 PM
Creo que su principal problema es que especificó los "temas" (plural) dentro de su ciclo, pero quería "tema" (singular).
# python3 bs_test.py
from urllib.request import urlopen
from bs4 import BeautifulSoup
# html = urlopen('https://tbd.com')
html = """
<div class="topic">
<a class="class_a" href="/href_1" data1="" data2="hello" data3="Hi" date="Monday, August 17" time="2:00 PM" topic="climate 8/17/2019 2:00 PM">
<span>2:00 PM</span>
<i class="Afternoon"></i>
</a>
</div>
"""
# bs = BeautifulSoup(html.read(), 'html.parser')
bs = BeautifulSoup(html, 'html.parser')
topics = bs.findAll("div", {"class": "topic"})
for topic in topics:
bar = topic.find('a')
print (bar['topic'])
Desea extraer el valor del atributo topic
, por lo que debe acceder a él como clave desde un dict:
print(bar['topic'])
Debería obtener el valor del tema de atributo en lugar del texto de anclaje como se muestra a continuación:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen('https://tbd.com')
bs = BeautifulSoup(html.read(), 'html.parser')
topics = bs.findAll("div", {"class": "topic"})
for topic in topics:
bar = topic.find('a')
print (bar.get('topic'))
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.