from - install beautifulsoup python 3
BeautifulSoup HTML tabla de anĂ¡lisis (2)
Estaba intentando reproducir su error, pero se cambió la página html de origen.
Sobre el error, tuve un problema similar, tratando de reproducir el ejemplo here
cambiando la URL propuesta para una tabla de Wikipedia
Lo arreglé moviéndome a BeautifulSoup4
from bs4 import BeautifulSoup
y cambiando la .string
para .get_text()
start = cols[1].get_text()
No pude probar su ejemplo (como dije antes, no pude reproducir el error) pero creo que podría ser útil para las personas que están buscando una solución a este problema.
Estoy intentando analizar información (tablas html) de este sitio: http://www.511virginia.org/RoadConditions.aspx?j=All&r=1
Actualmente estoy usando BeautifulSoup y el código que tengo se ve así
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
mech = Browser()
url = "http://www.511virginia.org/RoadConditions.aspx?j=All&r=1"
page = mech.open(url)
html = page.read()
soup = BeautifulSoup(html)
table = soup.find("table")
rows = table.findAll(''tr'')[3]
cols = rows.findAll(''td'')
roadtype = cols[0].string
start = cols.[1].string
end = cols[2].string
condition = cols[3].string
reason = cols[4].string
update = cols[5].string
entry = (roadtype, start, end, condition, reason, update)
print entry
El problema es con las columnas de inicio y fin. Solo se imprimen como "Ninguno"
Salida:
(u''Rt. 613N (Giles County)'', None, None, u''Moderate'', u''snow or ice'', u''01/13/2010 10:50 AM'')
Sé que se almacenan en la lista de columnas, pero parece que la etiqueta de enlace adicional está arruinando el análisis con el html original con el siguiente aspecto:
<td headers="road-type" class="ConditionsCellText">Rt. 613N (Giles County)</td>
<td headers="start" class="ConditionsCellText"><a href="conditions.aspx?lat=37.43036753&long=-80.51118005#viewmap">Big Stony Ck Rd; Rt. 635E/W (Giles County)</a></td>
<td headers="end" class="ConditionsCellText"><a href="conditions.aspx?lat=37.43036753&long=-80.51118005#viewmap">Cabin Ln; Rocky Mount Rd; Rt. 721E/W (Giles County)</a></td>
<td headers="condition" class="ConditionsCellText">Moderate</td>
<td headers="reason" class="ConditionsCellText">snow or ice</td>
<td headers="update" class="ConditionsCellText">01/13/2010 10:50 AM</td>
así que lo que se debe imprimir es:
(u''Rt. 613N (Giles County)'', u''Big Stony Ck Rd; Rt. 635E/W (Giles County)'', u''Cabin Ln; Rocky Mount Rd; Rt. 721E/W (Giles County)'', u''Moderate'', u''snow or ice'', u''01/13/2010 10:50 AM'')
Cualquier sugerencia o ayuda es apreciada, y gracias de antemano.
start = cols[1].find(''a'').string
o más simple
start = cols[1].a.string
o mejor
start = str(cols[1].find(text=True))
y
entry = [str(x) for x in cols.findAll(text=True)]