[Python-es] scrapear un javascript

Chema Cortes pych3m4 en gmail.com
Lun Ene 30 09:01:22 EST 2017


Ahora mismo, alrededor de javascript se ha montado un ecosistema tan arcano
que es dificil darte ideas generales que puedan aplicarse en cualquier
caso. Lo único que se puede hacer es esperar a que el navegador acabe por
mostrar todo el contenido y, aún así, nunca estarás seguro de que lo que
muestre no haya sido adaptado a tu situación geográfica, perfiles sociales
o, simplemente, que te hayan vetado tu IP por parecer un bot.

La idea del scraping es obtener información de una web que no es ofrecida
de otra manera. Lo ideal es que hubiera una API para obtener esta
información. (En Europa se empieza a ofrecer esta información desde las
administraciones públicas mediante opendata/opengov)

Si no has tenido suerte y, además, sigues empeñado en extraer la
información mediante python, mi consejo es usar webdriver (como te decía
lasizoillo), pero hazlo mediante Selenium. Aunque es más un framework para
diseñar pruebas de páginas webs, también hay quien lo usa para hacer
scraping. En los siguientes artículos puedes ver el proceso desde las
pruebas iniciales hasta definir un sistema de producción que funciona
mediante phantomjs (como también te decía lasizoillo):

http://thiagomarzagao.com/2013/11/12/webscraping-with-selenium-part-1/
http://thiagomarzagao.com/2013/11/14/webscraping-with-selenium-part-2/
http://thiagomarzagao.com/2013/11/15/webscraping-with-selenium-part-3/
http://thiagomarzagao.com/2013/11/16/webscraping-with-selenium-part-4/
http://thiagomarzagao.com/2013/11/17/webscraping-with-selenium-part-5/



El dom., 29 ene. 2017 a las 16:35, Gonzalo V (<gvm2121 en gmail.com>) escribió:

> gracias javi, muy útil tu respuesta. ¿que más se debería saber cómo para
> tener un camino más certero?
>
> El 27 ene. 2017 8:26 AM, "lasizoillo" <lasizoillo en gmail.com> escribió:
>
> Buenas,
>
> Para hacer scraping en sitios que abusan de javascript, siempre que no
> tengas unos criterios de eficiencia excesivos (en plan quiero un
> millón de requests hechas para mañana) y no te importe que el scraper
> use demasiada memoria, yo tiraría por echarle un vistazo a webdriver.
> Haces las pruebas manejando un chrome o un firefox y si todo va bien
> pasas a controlar un navegador headless como phantomjs.
>
> Te obliga a aprender tecnologías, pero a la larga te ahorra tiempo.
>
> Otra opción es investigar que hace ese javascript para simular su
> comportamiento con tu scraper. Googleando un poco tiene pinta que es
> una cosa tipo de .net y que hay ejemplos de como lidiar con ello:
>
>
> http://toddhayton.com/2015/05/04/scraping-aspnet-pages-with-ajax-pagination/
>
> http://stackoverflow.com/questions/23885771/scraping-with-dopostback-with-link-url-hidden
>
> Con la información que das tampoco se ser más concreto. Espero que te
> sea de utilidad.
>
> Un saludo,
>
> Javi
>
>
> El día 27 de enero de 2017, 5:33, Gonzalo V <gvm2121 en gmail.com> escribió:
> > Hola amigos.
> > Estoy scrapeando un sitio web publico con urllib y beautifulsoup4 y hay
> unos
> > tab o lenguetas que se llenan a través de javascript. ¿cómo podría
> obtener
> > esa información?
> > este es el link, el href
> >  <li id="ctl00_mainPlaceHolder_tabVotaciones"><a
> > id="ctl00_mainPlaceHolder_btnVotaciones"
> >
> href="javascript:__doPostBack('ctl00$mainPlaceHolder$btnVotaciones','')">Votaciones</a></li>
> >
> > y no lo puedo abrir con urllib.request.urlopen
> >
> > alguien sabe cómo?, han tenido algún problema similar?
> >
> >
> >
> > Saludos,
> > Gonzalo
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > https://mail.python.org/mailman/listinfo/python-es
> >
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170130/3b5e66ec/attachment.html>


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