[Python-es] Seleccionar una etiqueta en especial con HTMLParser

Alexandro Colorado jza en oooes.org
Sab Ago 9 21:08:55 CEST 2014


Hola Kiko, has podido revisarlo?

On 8/6/14, Kiko <kikocorreoso en gmail.com> wrote:
> estoy en el móvil y no puedo revisar lo que digo pero creo que
> HTMLParser tiene métodos para saber dónde te encuentras. Puedes buscar
> la posición del body y si te encuentras más allá pues te paras...
>
> Si encuentro tiempo intento elaborar la respuesta más tarde.
>
> El 6/8/14, Alexandro Colorado <jza en oooes.org> escribió:
>> Gracias, por resolver mi duda, aunque el script no me funciono supongo
>> por que al tener doctypes u algo malformado. Alguna sugerencia en como
>> ignorar el parsing a partir de ciertas lineas como el <body>? Auqnue
>> no sean parte de HTML.parse.
>>
>> Gracias.
>>
>> On 8/6/14, Kiko <kikocorreoso en gmail.com> wrote:
>>> Hola.
>>>
>>> Un ejemplo sencillo con HTMLParser:
>>>
>>> *# Importamos librerías*
>>> *import requests*
>>> *from html.parser import HTMLParser*
>>>
>>> *# Primero cojo unos datos con requests*
>>> *# Si no tienes requests puedes usar urllib*
>>> *data = str(requests.get("http://pybonacci.org
>>> <http://pybonacci.org>").content)*
>>>
>>> *# Creo una clase para el uso que le quiero dar a HTMLParser*
>>> *class Parser(HTMLParser):*
>>> *    def handle_starttag(self, tag, attrs):*
>>> *        if tag == 'img':*
>>> *            print("Start tag:", tag)*
>>> *            for attr in attrs:*
>>> *                if attr[0] == 'src':*
>>> *                    print(attr[1])*
>>>
>>> *# Et voilá*
>>> *parser = Parser()*
>>> *parser.feed(data)*
>>>
>>> Adapta la clase Parser al uso que le vayas a dar y listo. Mira los
>>> métodos
>>> handle_data, etc, en los ejemplos en [1].
>>>
>>> El código anterior es Python3, en Python2 deberás cambiar alguna cosita.
>>>
>>> [1] https://docs.python.org/3.4/library/html.parser.html
>>>
>>>
>>>
>>> El 5 de agosto de 2014, 17:31, Alexandro Colorado <jza en oooes.org>
>>> escribió:
>>>
>>>> Y en html.parser hay una opcion para seleccionar el tag a parsear?
>>>>
>>>> On 8/5/14, lasizoillo <lasizoillo en gmail.com> wrote:
>>>> > El día 4 de agosto de 2014, 23:53, Miguel Beltran R.
>>>> > <yourpadre en gmail.com> escribió:
>>>> >> No conozco html.parser pero si tu codigo HTML esta bien escribo
>>>> >> podrias
>>>> >> usar
>>>> >> lxml y hacer una busqueda con el (cosa que no recuerdo como se hace,
>>>> pero
>>>> >> creo que si la tenía)
>>>> >>
>>>> >
>>>> > Coincido con la recomendación de lxml.
>>>> >
>>>> > Puede parsear html
>>>> > http://lxml.de/parsing.html#parsing-html
>>>> >
>>>> > Se pueden usar selectores css:
>>>> > http://lxml.de/cssselect.html
>>>> > y xpath:
>>>> > http://lxml.de/xpathxslt.html
>>>> >
>>>> > Aparte de eso, funciona muy bien con ficheros muy grandes
>>>> >
>>>> http://stackoverflow.com/questions/9856163/using-lxml-and-iterparse-to-parse-a-big-1gb-xml-file
>>>> >
>>>> > Un saludo,
>>>> >
>>>> > javi
>>>> >
>>>> >>
>>>> >> 2014-08-04 15:02 GMT-05:00 Alexandro Colorado <jza en oooes.org>:
>>>> >>
>>>> >>> Saludos una pregunta sencilla. Quiero seleccionar una etiqueta por
>>>> >>> su
>>>> >>> clase dentro de un html usando html.parser de python 3.2.
>>>> >>>
>>>> >>> El html es grande, y aunque he podido parsear cosas como starttag,
>>>> >>> y
>>>> >>> data, ahora quiero limitar el html a unicamente las clases que
>>>> >>> necesito.  En este caso el tag es
>>>> >>> <td class="ticket">Costo</td>
>>>> >>> <td class="value">$ 432.23</td>
>>>> >>>
>>>> >>> Gracias.
>>>> >>>
>>>> >>> --
>>>> >>> Alexandro Colorado
>>>> >>> Apache OpenOffice Contributor
>>>> >>> 882C 4389 3C27 E8DF 41B9  5C4C 1DB7 9D1C 7F4C 2614
>>>> >>> _______________________________________________
>>>> >>> Python-es mailing list
>>>> >>> Python-es en python.org
>>>> >>> https://mail.python.org/mailman/listinfo/python-es
>>>> >>> FAQ: http://python-es-faq.wikidot.com/
>>>> >>
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> ________________________________________
>>>> >> Lo bueno de vivir un dia mas
>>>> >> es saber que nos queda un dia menos de vida
>>>> >>
>>>> >> _______________________________________________
>>>> >> Python-es mailing list
>>>> >> Python-es en python.org
>>>> >> https://mail.python.org/mailman/listinfo/python-es
>>>> >> FAQ: http://python-es-faq.wikidot.com/
>>>> >>
>>>> > _______________________________________________
>>>> > Python-es mailing list
>>>> > Python-es en python.org
>>>> > https://mail.python.org/mailman/listinfo/python-es
>>>> > FAQ: http://python-es-faq.wikidot.com/
>>>> >
>>>>
>>>>
>>>> --
>>>> Alexandro Colorado
>>>> Apache OpenOffice Contributor
>>>> 882C 4389 3C27 E8DF 41B9  5C4C 1DB7 9D1C 7F4C 2614
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>
>>
>>
>> --
>> Alexandro Colorado
>> Apache OpenOffice Contributor
>> 882C 4389 3C27 E8DF 41B9  5C4C 1DB7 9D1C 7F4C 2614
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


-- 
Alexandro Colorado
Apache OpenOffice Contributor
882C 4389 3C27 E8DF 41B9  5C4C 1DB7 9D1C 7F4C 2614


Más información sobre la lista de distribución Python-es