Parsear web dudas

W

Buenas tardes

Googleando para parsear una web he dado con mediavida :-) en el foro he visto algunos post que me han ayudado a dar los primeros pasos. Pero ahora me encuentro en una situación con la que no se por donde continuar y espero que ustedes me puedan indicar u orientar.

Les cuento que estoy utilizando python y BeautifulShop.
Extraigo el precio de diversos productos de una web creada con magento. A la hora de extraer la información del tipo www.dominio.com/categoria no tengo problema ya que obtengo el documento html y extraigo la información de los primeros 15 productos que se muestran.

Ahora bien el problema lo tengo al querer cargar y extraer la información de los siguientes 15 productos ya que para cargarlos usan ajax.
Ejemplo:
Request URL:http://www.dominio.com/television/televisores-led?ajax=1&p=2

Me pueden echar un cable y orientar para saber por donde continuar??

Muchas gracias :-)

elkaoD

Hola Willy, bienvenido al foro :)

La técnica es la misma. AJAX no es nada especial, más allá de que la consulta HTTP se realiza en JS en lugar de por el usuario.

Puedes usar FireBug o las propias DevTools de Chrome/Firefox para echar un vistazo a la URL y parámetros (POST o GET). En el panel de "Red" puedes elegir cada request y examinarla. De ahí tratar de imitar su request.

La request URL que has puesto no funciona así que, dependiendo del formato de respuesta, tendrás que hacer una cosa u otra. Si es HTML, pues BeautifulSoup. Si es JSON usa json.

W

Muchas gracias elkaoD

La request URL no funciona porque el dominio no es el correcto lo he modificado para no exponer la web, por si acaso estaba infringiendo alguna norma del foro.

La request vuelca la siguiente información:

Request URL:http://www.nombredeldominio.com/electrodomesticos/lavadoras-baratas/lavadoras-de-carga-frontal?ajax=1&p=3
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/javascript, text/html, application/xml, text/xml, /
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es-ES,es;q=0.8
Connection:keep-alive
Cookie:.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ul=0; coId=1000000082557; sId=0; __zlcid=%7B%22mID%22%3A%22IGckqwfougADbj%22%2C%22sid%22%3A%22130521.47980.4BUe6v8t%22%7D; frontend=qum0ct82hsgrcinkv29adsa3t1
Host:www.nombredeldominio.com
Referer:http://www.nombredeldominio.com/electrodomesticos/lavadoras-baratas/lavadoras-de-carga-frontal?p=3
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31
X-Prototype-Version:1.7
X-Requested-With:XMLHttpRequest
Query String Parametersview sourceview URL encoded
ajax:1
p:3
Response Headersview source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:5978
Content-Type:text/html; charset=UTF-8
Date:Tue, 21 May 2013 17:45:10 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=200
Pragma:no-cache
Server:Apache/2.2.23 (CentOS)
Set-Cookie:frontend=qum0ct82hsgrcinkv29adsa3t1; expires=Tue, 21-May-2013 18:45:10 GMT; path=/; domain=www.nombredeldominio.com; httponly
Vary:Accept-Encoding,User-Agent
X-Powered-By:PHP/5.3.19

No se si te refieres a esto...

1 respuesta
elkaoD

#3 dos cosillas primero:

  1. Si me citas poniendo #2 (o el # de post que sea) me sale el aviso. ¡Casi me pierdo tu respuesta! ;)
  2. No infringes normas del foro, si quieres poner el dominio, adelante.
    __________

De vuelta al problema: por lo que veo ahí no hay mucha magia. Haz el request a esa URL de la misma forma que lo estabas haciendo con la no-AJAX. No debería haber problema, ¿no? ¿Te falla algo en concreto?

La parte que te interesa es la de arriba (Request Headers), que es la que deberás imitar:

Accept:text/javascript, text/html, application/xml, text/xml, */*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es-ES,es;q=0.8
Connection:keep-alive

Cookie:.utmcsr=google|utmccn=(org......
Referer:http://www.nombredeldominio.com/ele...arga-frontal?p=3
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac O......
X-Prototype-Version:1.7

X-Requested-With:XMLHttpRequest

Te marco en negrita algunas que a veces comprueban los programadores para detectar si es AJAX o una request forjada (como en tu caso). En concreto la más importante es X-Requested-With:XMLHttpRequest. Casi nunca son importantes en realidad, pero a veces lo comprueban. Si ves que te sigue sin funcionar intenta que tu request HTTP se parezca cada vez más a la que has pasteado (incluyendo las no-negritas) porque es imposible que el servidor distinga nada más que eso.

En la parte de la respuesta, según Content-Type:text/html; charset=UTF-8 la respuesta es HTML, así que tampoco deberías tener problema en parsear.

1 1 respuesta
W

#4
Muchas gracias por la indicaciones. Pedazo de foro!!

Efectivamente, tenías razón. Estaba yo enmelonado con lo de ajax y no vi el Referer...

Lo dicho muchas gracias, con eso ya tengo el problema resuelto :-)

Una duda este foro se puede abrir desde el android con tapatalk?

Saludos

1 respuesta
elkaoD

#5 de nada, para eso estamos. Ahora te toca a ti ayudar al próximo :P

No, no hay Tapatalk, pero en http://m.mediavida.com tienes una versión móvil.

Usuarios habituales