Web Scraping JS

271 views
Skip to first unread message

Martin Peveri

unread,
Jul 28, 2014, 11:23:22 AM7/28/14
to phplatin...@googlegroups.com
Hola Amigos necesito hacer web scraping con java script solamente, nada de php o python ni nada, solo js. La mayoría de los casos que vi usan la función ajax de jquery, pero a mi no me sirve por que tengo que leer una url de otro página y ajax no permite eso. Tienen una idea de como hacerlo?.

Muchas gracias

Analyzer

unread,
Jul 28, 2014, 3:55:23 PM7/28/14
to PHP Latinoamérica
Encontré este enlace, pero igual creo que no te serviría porque dices que lo quieres con js puro:



Saludos!


El 28 de julio de 2014, 10:23, Martin Peveri <martin...@gmail.com> escribió:
Hola Amigos necesito hacer web scraping con java script solamente, nada de php o python ni nada, solo js. La mayoría de los casos que vi usan la función ajax de jquery, pero a mi no me sirve por que tengo que leer una url de otro página y ajax no permite eso. Tienen una idea de como hacerlo?.

Muchas gracias

--
Has recibido este mensaje porque estás suscrito al grupo "PHP Latinoamérica" de Grupos de Google.
Visita este grupo en http://groups.google.com/group/phplatinoamerica.

Alvaro Lizama

unread,
Jul 28, 2014, 6:12:36 PM7/28/14
to phplatin...@googlegroups.com
Necesitas hacerlo desde una web? por que tiene que ser solo con javascript? 

Si es via web con javascript si o si puedes usar CORS o JSONP talves, pero lo veo dificil sobre todo para el parseo.


Pero es practicamente inviable hacerlo via web solo con javascript sobre todo si se screapearan muchas urls.

Martin Peveri

unread,
Jul 28, 2014, 6:48:55 PM7/28/14
to phplatin...@googlegroups.com
Leí algo como jsonp, que me permite realizar peticiones asincrónicas de una url externa, pero los ejemplos no eran claros o no se si es lo que yo necesito.
Con respecto al enlace que me diste una biblioteca en python por lo que vi.

Yo quiero que sea si o si js por que es una apps en html, pero mobile y no quiero implementar un servicio para darle los datos. Quería hacerlo todo con js.

Una vez vi que con YUI se puede hacer lo que necesito, pero no encuentro el artículo.

Alvaro Lizama

unread,
Jul 28, 2014, 6:56:36 PM7/28/14
to phplatin...@googlegroups.com
Si te podria servir JSONP y si es una libreria python pero tiene mucho en el front end que hace parte del scraping, no se que tanto necesites pero de algo te puede ayudar.

Si es mobile creo que tendras muchos problemas de performance para screapear desde los webviews.

En la oficina hay una area que se dedica a hacer screappers y por muy optmizados que sean siempre tardan y consumen a la hora de trabajar y es que es puro backend.

Martin Peveri

unread,
Jul 29, 2014, 10:32:29 AM7/29/14
to phplatin...@googlegroups.com
Alvaro tenes un buen ejemplo de como usar jsonp, por lo que tengo no anda. Nunca entra al alert.

$.ajax({
           url: url,
           dataType: 'jsonp',
           crossDomain: true,
           jsonpCallback: 'callback',
    contentType: "application/json",
           success: function(response) {
             alert("Si");
           }
       });

Gracias

Analyzer

unread,
Jul 29, 2014, 11:03:34 AM7/29/14
to PHP Latinoamérica
>Hola Amigos necesito hacer web scraping con java script solamente, nada de php o python ni nada, solo js

Hay alguna razón por la que no puedas usar algo distinto a JS? Leo que las politicas de JS no permiten eso.


También leo que se puede usar Jquery u otros como mootools:


http://bit.do/KTas 

Saludos!


El 28 de julio de 2014, 10:23, Martin Peveri <martin...@gmail.com> escribió:
Hola Amigos necesito hacer web scraping con java script solamente, nada de php o python ni nada, solo js. La mayoría de los casos que vi usan la función ajax de jquery, pero a mi no me sirve por que tengo que leer una url de otro página y ajax no permite eso. Tienen una idea de como hacerlo?.

Muchas gracias

--

Analyzer

unread,
Jul 29, 2014, 11:07:39 AM7/29/14
to PHP Latinoamérica
Perdón, no vi que estaba en Español también: http://es.wikipedia.org/wiki/Pol%C3%ADtica_del_mismo_origen


Saludos!

Martin Peveri

unread,
Jul 30, 2014, 10:44:46 AM7/30/14
to phplatin...@googlegroups.com
Consulta alguien sabe como arreglar este error que me da la consola de js:

XMLHttpRequest cannot load myurl. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.

Estoy probando el código desde jsfiddle

Simplemente lo que hago es esto: 



Quiero obtener unos datos de la api de wikipedia.

Gracias


Juan Andrés Peón

unread,
Jul 30, 2014, 11:01:20 AM7/30/14
to phplatin...@googlegroups.com
Ok, eso es lo que te estuvieron diciendo que iba a pasar. El tema que tenes es que los browser no te dejan hacer requests via xhr (ajax) a hosts diferentes (incluye dominio, subdominio y protocolo). Para no tener problemas con los requests cross-origin del lado del servidor que hostea tus 'targets' tienen que configurar CORS y tener tu host en la lista de allowed origins.

Documentacion de CORS:

Igual nada de esto soluciona tu problema, porque parece que estas queriendo acceder sitios sobre los que no tenes control. La unica manera que se me ocurre, maneteniendo tu requerimiento de que sea JS en acotado a una pagina, es que tengas un iframe y le cambies el source, y lo ataques por ahi, pero todo sitio que use iframe busters te deja afuera. 
Otra que podes hacer es armar un script y bookmarkearlo y correrlo en cada sitio.

Igual aca el gran problema que tenes es que lo que tratas de hacer se te complica, porque hacerlo de la manera que queres hacerlo es mala idea. Tenes que dar vueltas alrededor de las politicas de seguridad de los browsers, hacer scraping de sitios es bastante 'caro' en recursos y vos justo estas armando la app para dispositivos que son escasos de recursos.

Dicho eso y como ejercicio intelectual se me acaba de ocurrir una manera SUPER chancha pero que puede ser divertido de tratar de implementar. Podes armarte un proxy y reescribir los requests, para que te incluya los header de CORS :P

En resumen: lo que queres hacer se te complica porque no es la manera de hacerlo, si no sabias y/o decidiste que no querias armar un servicio para esto es probable que no vayas a poder tampoco implementar una solucion que satisfaga tus requerimientos. Te sugiero que te armes un servicio, porque te va a salir mas caro tratar de armar un proxy y estoy casi seguro que lo de jsonp no te va a funcar.

Saludos!




Gracias


--
Has recibido este mensaje porque estás suscrito al grupo "PHP Latinoamérica" de Grupos de Google.
Visita este grupo en http://groups.google.com/group/phplatinoamerica.



--
"Diplomacy is the art of saying 'Nice doggie' until you can find a rock."
-- Will Rogers

Martin Peveri

unread,
Jul 30, 2014, 11:16:39 AM7/30/14
to phplatin...@googlegroups.com
Gracias juan por responder, pero esta vez no estoy haciendo scrapping, si bien tiene que ver con el tema, lo que quiero hacer ahora es recuperar un json desde la url de wikipedia. Para esto también es necesario configurar CORS?.

Si otra no me queda, voy a tener que hacer un servicio como me decís, pero estaría en la misma. No puede leer un servicio desde js me da siempre ese  error.

Gracias

Juan Andrés Peón

unread,
Jul 30, 2014, 12:01:19 PM7/30/14
to phplatin...@googlegroups.com
En realidad si te haces un servicio, te pasan 2 cosas:
(a) estas en el mismo host asi que no precisas nada
(b) si estas en otro host, podes meter los headers para habilitar CORS y no tenes problemas

Calculo que wikipedia habilita json como respuesta, pero no manda los headers CORS para que no los maten con todavia MAS requests, que de ultima le dan de comer a otros :)

Saludos!


--
Has recibido este mensaje porque estás suscrito al grupo "PHP Latinoamérica" de Grupos de Google.
Visita este grupo en http://groups.google.com/group/phplatinoamerica.

Alvaro Lizama

unread,
Jul 30, 2014, 12:16:17 PM7/30/14
to phplatin...@googlegroups.com
Con JSONP funciona http://jsfiddle.net/CDR6Q/
Reply all
Reply to author
Forward
0 new messages