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

Juan BC jbc.develop en gmail.com
Dom Ago 10 06:01:39 CEST 2014


Y es mas podes usar beautifulsoup con un backend lxml para aumentar tu
rendimiento sin necesidad de alterar tu codigo
El 09/08/2014 23:55, "Ricardo Azpeitia Pimentel" <razpeitia en gmail.com>
escribió:

> Por favor una una librería de verdad para parsear tu HTML.
>
> Puedes usar beautifulSoup en caso que no tengas un compilador de C, o en
> caso que tengas uno lxml es una excelente opción.
>
> Razones para usar una librería:
> 1. Es fácil.
> 2. Es rápido. Incluso mas rápido que las librerías integradas.
> 3. Es mas robusto. Hay un motón de escenarios donde html parser
> simplemente no aguantara.
>
> Razones para no usar una librería:
> 1. Estas trabajando con embebidos.
>
> Enserio no veo ningún pretexto para no usar una librería completa.
>
> Puedes intentar hacerlo htmlparse pero eso implicaría que tendrías que
> construir tu propio arbol (DOM), satinizar tus propias cosas, (como cerrar
> etiquetas, checar que encoding usa, etc, etc, ), hacer tu propio lenguaje
> para hacer queries al dom (selectores vs xpath). En fin hay un montón de
> casos que jamas te habías imaginado.
>
> Es ridículamente sencillo como, parsear html con una librería:
> <importar libreria>
> <instanciar objeto de la libreria con html>
> <hacer query con selectors o xpath>
>
> http://www.crummy.com/software/BeautifulSoup/bs4/doc/
>
> Buena suerte.
>
>
> El 9 de agosto de 2014, 14:08, Alexandro Colorado <jza en oooes.org>
> escribió:
>
>> 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
>> _______________________________________________
>> 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/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20140810/7cb4af22/attachment.html>


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