Problema para leer valores de una tabla html con Beautifulsoap

Soy nuevo en python 3. Mi problema es cuando intento leer los valores de una tabla con la siguiente sentencia:

soap.find_all(re.compile(’[0-9]’))

soap = Inika2

intento leer el valor 2, pero la sentencia con find_all no logra extraela.
¿Cual es mi error?

Gracias.

Montgomery

Hola, daniel; ¿podrías expresarte un poco más? ¿Qué estás tratando de buscar? ¿Qué página cargás? ¿Cuál es todo el código que estás usando? ¿Qué quiere decir esto:

soap.find_all(re.compile(’[0-9]’))

soap = Inika2

¿Qué es la variable Inika2? ¿Qué es el link que pasaste?

En cualquier caso, tomá en cuenta que find_all toma como primer parámetro name, que es el nombre del tag, o sea que le estás pidiendo que te devuelva todos los elementos que tengan un número en el nombre, como serían <h2>.

Paso el código de mi programa:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
import re

Ignorar errores de certificado SSL

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = ‘http://py4e-data.dr-chuck.net/comments_42.html
html = urlopen(url, context=ctx).read()
sopa = BeautifulSoup(html, “html.parser”)

tags = sopa(‘tr’)
for tag in tags:
score = tag.find_all(re.compile(’[0-9]’))
print(score)

es una tabla, logre identificar las filas donde están los datos que es lo que corre en el bucle for, pero cuando hago find_all no lee los números, y me da una lista vacía la búsqueda.
Gracias
Daniel

Usá ``` alrededor de tu código cuando escribís, porque si no el editor lo interpreta como formato y se ve mal. O, peor, si ponés HTML, pasa cualquier cosa con el estilo.

Lo que le estás pidiendo ahí es: “Dame todos los tags <tr>, y para cada uno de esos buscame los tags que tengan un número en el nombre”. O sea, estás buscando <h1>, por ejemplo. Para hacer que find_all mire el contenido del tag tenés que llamarlo así:

tag.find_all(string=re.compile('[0-9]'))

Como nota, fijate que es redundante buscar los tr y dentro de los tr buscar los números; podés directamente hacer:

soap.find_all...

Y si sólo querés los td que tengan números adentro, podés poner

soap.find_all('td', string=regex...

Perfecto, lo probe como me indicaste ‘’‘tag.find_all(string=re.compile(’[0-9]’))’’’ y me devuelve la lista de numeros que necesitaba.

luego intente poner todo como me indicaste:
‘’‘score = sopa.find_all(string=re.compile(’[0-9]’))’’’
me da la lista pero no se como sacar el primer elemento:

‘’’[‘Welcome to the comments assignment from www.py4e.com’, ‘97’, ‘97’, ‘90’, ‘90’, ‘88’, ‘87’, ‘87’, ‘80’, ‘79’, ‘79’, ‘78’, ‘76’, ‘76’, ‘72’, ‘72’, ‘66’, ‘66’, ‘65’, ‘65’, ‘64’, ‘61’, ‘61’, ‘59’, ‘58’, ‘57’, ‘57’, ‘54’, ‘51’, ‘49’, ‘47’, ‘40’, ‘38’, ‘37’, ‘36’, ‘36’, ‘32’, ‘25’, ‘24’, ‘22’, ‘21’, ‘19’, ‘18’, ‘18’, ‘14’, ‘12’, ‘12’, ‘9’, ‘7’, ‘3’, ‘2’]’’’

Gracias
Saludos.

Leé la última línea de mi mensaje

Ok Gracias.