Hace un par de meses que he estado aprendiendo scraping con diferentes clases como XPath.
Hace un par de semanas he estado intentando hacer algo que probablemente es sencillo pero no he podido encontrar la respuesta fácilmente así que me gustaría que me pudiesen ayudar.
Antes de mostrarle mi código, quiero que entiendan el problema.
Tengo una una pagina web que requiere un login y luego llenar otro formulario y enviarlo para que me muestre los datos que yo requiero.
Por lo tanto los pasos serian los siguientes.
1. Abrir la url y hacer login (1er formulario)
2. En la nueva url despues de hacer login, debo llenar ciertos campos y enviar (2do formulario)
3. Hacer scraping.
Mi problema radica en el paso #2. Despues de hacer el primer login no tengo idea de como usar el resultado del primer cURL (ver el codigo)
Este codigo toma una url que contiene el formulario y un Array que tiene los valores que pasare el formulario
Código:
function curlPost($postUrl, $postFields) {
$cookie = 'cookie.txt'; // Setting a cookie file to store cookie
$ch = curl_init(); // Initialising cURL session
// Setting cURL options
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Prevent cURL from verifying SSL certificate
curl_setopt($ch, CURLOPT_FAILONERROR, TRUE); // Script should fail silently on error
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); // Use cookies
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow Location: headers
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Returning transfer as a string
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); // Setting cookiefile
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); // Setting cookiejar
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8"); // Setting useragent
curl_setopt($ch, CURLOPT_URL, $postUrl); // Setting URL to POST to
curl_setopt($ch, CURLOPT_POST, TRUE); // Setting method as POST
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields)); // Setting POST fields as array
$results = curl_exec($ch); // Executing cURL session
curl_close($ch); // Closing cURL session
return $results;
}
Luego, este primer bloque, lo ejecuto de la siguiente manera:
Código:
$user ="userxxx";
$pass = "passxxxxxxx";
$login_url = "http://www.xxxxx.com/repositorio/consultas_web/";
$post_array = array ('login' => $user,
'password' => $pass); // Building post array.
$results = curlPost($login_url, $post_array);
En este punto se que el primer paso cumple su función ya que si cambio la clave o user por uno invalido, me dara una advertencia de credenciales invalidos.
para verificar tengo que hacer un
Código:
echo $results;
Esto me lleva a la sub url que seria el "home" despues de hacer login
En mi caso, como estoy probando en localhost me da un error 404 cuando el login es correcto. La ruta es la siguiente:
Código:
[b]localhost/scraping/[/b]consultas_privadas.php
El problema es que no se como continuar con la segunda etapa.
Pues, tengo que usar el resultado ( $results ) y hacer un cURL nuevamente para repetir este método pero en un formulario diferente
intente utlizando el mismo metodo que en el paso 1 pero no se que estoy haciendo mal.
Código:
$results2 = curlPost($result, $post_array2);
y la verdad es que no se si esta mal o bien pues no se si tengo hacer un
Código:
echo $results;
Alguien ha intentado hacer dos cURLs seguidos antes?
Estoy perdido cualquier ayuda es muy apreciada.
Gracias por tomar el tiempo para leer