Scraping consulta RUC 2024-12

El código utilizaado en la demostración del video es este :

 ************HTML**********************

<!DOCTYPE html>

<html>

<head>

    <meta name="viewport" content="width=device-width" />

    <title>Index</title>

    <style>

        html, body {

            padding: 0px;

            margin: 0px;

            font-family: sans-serif;

        }

        .titulo {

            padding: 15px;

            font-weight: bold;

            background-color: #073f67;

            text-align: center;

            color: #fff;

        }

        .fila {

            display: flex;

            flex-direction: row;

            justify-content: center;

            align-items: center;

            column-gap: 15px;

            margin: 10px 0px;

        }


        .boton {

            background-color: #137fb3;

            color: white;

            border: none;

            border-radius: 6px;

            padding: 10px 15px;

            cursor: pointer

        }

            .boton:hover {

                opacity: 0.9;

                box-shadow: 1px 1px 1px 0px #b9b2b2, 2px 2px 2px 0px #b1acac;

            }

        /*tabla*/

        table {

            font-family: arial, sans-serif;

            border-collapse: collapse;

            width: 100%;

        }

        td, th {

            border: 1px solid #dddddd;

            text-align: left;

            padding: 8px;

        }

        tr:nth-child(even) {

            background-color: #dddddd;

        }

    </style>

</head>

<body>

    <div class="titulo">Web Scraping consulta RUC</div>

    <div class="fila">

       <input type="text" id="ruc" /> <button id="btnConsulta" class="boton">Consultar</button>

    </div>

    <div class="fila">

        <textarea id="txtData" style="width:400px;height:300px"></textarea>

    </div>

    <script src="~/Scripts/WebScrapingconsultaRuc.js"></script>

</body>

</html>

 ************JAVASCRIPT**********************

window.onload = function () {

    let btnConsulta = document.getElementById("btnConsulta");

    btnConsulta.onclick = function () {

        let ruc = document.getElementById("ruc").value;

        if (ruc) {


            let fd = new FormData();

            fd.append("ruc",ruc)


            servidor({ url: "obtenerInformacionRuc202412", data: fd }).then((data) => {


                document.getElementById("txtData").value = data;

            })

        }

    }

}


function servidor({ metodo = "post", url = null, data = null, responsetype = "text" } = {}) {

    return new Promise((resolve, reject) => {

        let xhr = new XMLHttpRequest();

        xhr.open(metodo, url);

        xhr.responseType = responsetype;

        xhr.onreadystatechange = function () {


            if (xhr.readyState == 4 && xhr.status == 200) {

                resolve(xhr.response);

            }

        }

        xhr.onerror = function (e) {

            reject(e)

        }

        xhr.send(data);

    });

}

************************** C#***********************************
using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using System.Web.UI.WebControls;

namespace PracticaJavascriptAPI.Controllers
{

    public class WebScrapingController : Controller
    {
 

  
        public ActionResult ConsultaRuc()
        {
            return View();
        }



        public async Task<string> obtenerInformacionRuc202412(string ruc)
        {


            string token = "2222";
            string rpta = "";
            using (HttpClient cliente = new HttpClient())
            {

                var pairs = new List<KeyValuePair<string, string>>
                    {
                        new KeyValuePair<string, string>("accion", "consPorRuc"),
                        new KeyValuePair<string, string>("razSoc", ""),
                        new KeyValuePair<string, string>("nroRuc", ruc),
                        new KeyValuePair<string, string>("nrodoc", ""),
                        new KeyValuePair<string, string>("token", token),
                        new KeyValuePair<string, string>("contexto", "ti-it"),
                        new KeyValuePair<string, string>("modo", "1"),
                            new KeyValuePair<string, string>("rbtnTipo", "1"),
                        new KeyValuePair<string, string>("search1", ruc),
                        new KeyValuePair<string, string>("tipdoc", "1"),
                        new KeyValuePair<string, string>("search2", ""),
                        new KeyValuePair<string, string>("search3", ""),
                        new KeyValuePair<string, string>("codigo", ""),

                    };
                var content = new FormUrlEncodedContent(pairs);


                string url = "https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias";

                HttpResponseMessage resultado = await cliente.PostAsync(url, content);

                if (resultado.IsSuccessStatusCode)
                {
                    rpta = await resultado.Content.ReadAsStringAsync();


                    Dictionary<string, object> dtRuc = new Dictionary<string, object>();
                    List<string> DataRuc = new List<string>();
                    string html = rpta.Replace("\t", "").Replace("\r\n", "");// await result.Content.ReadAsStringAsync();

                    string[] filas = html.Split(new String[] { "list-group-item\"", "list-group-item-success\"" }, StringSplitOptions.None);
                    int n = filas.Length;
                    int posClave = -1, posValor = -1, posMayor = -1, posMenor = -1;
                    string fila, clave, valor;
                    for (int i = 0; i < n; i++)
                    {
                        fila = filas[i];
                        posClave = fila.IndexOf("list-group-item-heading");
                        if (posClave > -1)
                        {
                            posMayor = fila.IndexOf(">", posClave);
                            if (posMayor > -1)
                            {
                                posMenor = fila.IndexOf("<", posMayor);
                                clave = fila.Substring(posMayor + 1, (posMenor - posMayor) - 1);

                                if (i <= 1)
                                {
                                    posClave = fila.IndexOf("list-group-item-heading", posMenor);
                                }
                                else
                                {
                                    posClave = fila.IndexOf("list-group-item-text", posMenor);
                                }

                                if (posClave > -1)
                                {
                                    posMayor = fila.IndexOf(">", posClave);
                                    posMenor = fila.IndexOf("<", posMayor);
                                    valor = fila.Substring(posMayor + 1, (posMenor - posMayor) - 1);

                                    DataRuc.Add(clave + "|" + valor);
                                    dtRuc.Add(clave.Replace(":", "").Replace(" ", "_"), valor);

                                    posClave = fila.IndexOf("list-group-item-heading", posMenor);
                                    if (posClave > -1)
                                    {
                                        posMayor = fila.IndexOf(">", posClave);
                                        if (posMayor > -1)
                                        {
                                            posMenor = fila.IndexOf("<", posMayor);
                                            clave = fila.Substring(posMayor + 1, (posMenor - posMayor) - 1);
                                            posClave = fila.IndexOf("list-group-item-text", posMenor);

                                            posMayor = fila.IndexOf(">", posClave);
                                            posMenor = fila.IndexOf("<", posMayor);
                                            valor = fila.Substring(posMayor + 1, (posMenor - posMayor) - 1);

                                            DataRuc.Add(clave + "|" + valor);
                                            dtRuc.Add(clave.Replace(":", "").Replace(" ", "_"), valor);

                                            if (clave.Equals("Fecha de Inicio de Actividades"))
                                            {

                                            }

                                        }

                                    }

                                }
                                else
                                {
                                    posClave = fila.IndexOf("tblResultado", posMenor);
                                    if (posClave > -1)
                                    {
                                        string htmlTabla = fila.Substring(posClave, (fila.Length - posClave));
                                        List<string> detalle = new List<string>();
                                        string[] trs = htmlTabla.Split(new String[] { "<tr>" }, StringSplitOptions.None);
                                        int ntr = trs.Length;
                                        int postd = -1, postdd = -1;
                                        for (int j = 0; j < ntr; j++)
                                        {
                                            postd = trs[j].IndexOf("<td>");
                                            if (postd > -1)
                                            {
                                                postdd = trs[j].IndexOf("<", postd + 1);
                                                detalle.Add(trs[j].Substring(postd + 4, (postdd - (postd + 4))));

                                            }
                                        }
                                        valor = string.Join(",", detalle);
                                        DataRuc.Add(clave + "|" + valor);
                                        dtRuc.Add(clave.Replace(":", "").Replace(" ", "_"), valor.Split(','));

                                    }
                                }
                            }
                        }
                    }


                    //rpta = String.Join("¬", DataRuc);
                    rpta = new JavaScriptSerializer().Serialize(dtRuc);


                }
            }

            return rpta;

        }


    }
}

Comentarios

Entradas populares de este blog

Web Scraping en Argentina: búsqueda de personas por DNI paso a paso

¡Mira Cómo Obtengo Datos de un Vehículo Solo con la Placa! (Web Scraping)

Bot whatsapp con whatsapp-web.js y nodejs