soup from compile beautiful python beautifulsoup html-table html-parsing mechanize

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)]