Pop

Bot web Scraping - Web ESPN - Parte 7

7. Web Scraping de la página ESPN

  •  En este capítulo del curso de programación en c# con visual studio 2017 guardaremos los datos de los jugadores en nuestra base de datos llamando a un procedimiento almacenado desde nuestra aplicación de consola.Os dejo nuestro diseño de tablas:

  • Para poder guardar los datos necesarios en la tabla jugadores necesitamos obtenerlos de los ficheros que tenemos almacenados en nuestro disco duro.Para ello tenemos que ver de que manera obtener los datos. Os lo cuento en el vídeo:


  • Os dejo los métodos vistos en el vídeo:
        static void guardarDatosJugadores()
        {
            SqlConnection conexion = null;


            DirectoryInfo directorio = new DirectoryInfo(@"D:\JugadoresNBA\");
            FileInfo[] archivos = directorio.GetFiles();
            String linea = String.Empty;
            int cont = 0;
            foreach (FileInfo archivo in archivos)
            {
                Jugador j = new Jugador();
                HtmlDocument doc = new HtmlDocument();
                HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
                doc.OptionWriteEmptyNodes = true;
                doc.Load(archivo.FullName);

                string selector = "//ul[@class='general-info']";
                HtmlNodeCollection nodoColecion = doc.DocumentNode.SelectNodes(selector);



                if (nodoColecion != null)
                {
                    foreach (HtmlNode nodo in nodoColecion)
                    {
                        conexion = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
                        try
                        {

                            cont++;
                            Console.WriteLine(cont.ToString());
                            Console.WriteLine();
                            j.Nombre = archivo.Name.Substring(0, archivo.Name.Length - 5);
                            DameDatosFisicos("//ul[@class='general-info']//li", doc, ref j);
                            Console.WriteLine(j.Nombre);
                            Console.WriteLine(j.Posicion);

                            if (j.Posicion.Contains("#"))
                                j.EnActivo = true;
                            else
                                j.EnActivo = false;

                            Console.WriteLine(j.Peso.ToString());
                            Console.WriteLine(j.Altura.ToString());
                            DameDatosExperiencia("//ul[@class='player-metadata floatleft']//li", doc, ref j);
                            Console.WriteLine(j.AnyiosActivo.ToString());


                             conexion.Open();

                             SqlCommand Comm = conexion.CreateCommand();
                             Comm.CommandText = "dbo.GuardarJugadorNBA";
                             Comm.CommandType = CommandType.StoredProcedure;
                             Comm.Parameters.Add("@Jugador", SqlDbType.VarChar, 500).Value = j.Nombre;
                             Comm.Parameters.Add("@Poscion", SqlDbType.VarChar, 50).Value = j.Posicion;
                             Comm.Parameters.Add("@altura", SqlDbType.VarChar, 50).Value = j.Altura;
                             Comm.Parameters.Add("@Peso", SqlDbType.Int).Value =j.Peso;
                             Comm.Parameters.Add("@anyio", SqlDbType.Int).Value = j.AnyiosActivo;
                             Comm.Parameters.Add("@enactivo", SqlDbType.Bit).Value = j.EnActivo;
                              Comm.ExecuteNonQuery();
                        }

                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                            Console.ReadLine();


                        }
                        finally
                        {
                            conexion.Close();
                            conexion.Dispose();
                        }


                    }

                }

            }

            Console.WriteLine("Operacion completada");
            Console.ReadLine();
        }

     static void DameDatosFisicos(string selector, HtmlDocument doc, ref Jugador j)
        {

            HtmlNodeCollection nodoColecion = doc.DocumentNode.SelectNodes(selector);
            if (nodoColecion != null)
            {
                //vienen dos lineas una para la posición y otra para el peso y la ultura
                if (nodoColecion.Count == 2)
                    foreach (HtmlNode nodo in nodoColecion)
                    {
                        if (j.Posicion == String.Empty)
                            j.Posicion = nodo.InnerText;
                        else if (j.Peso == 0)
                        {
                            string[] x = nodo.InnerText.Split(',');
                            if (x.Length > 0)
                            {
                                string altura = x[0].Replace("\"", "").Replace("'", ".").Replace(" ", "");
                                j.Altura = altura;
                                if (x.Length > 1)
                                    j.Peso = Convert.ToInt32(Convert.ToInt32(x[1].Replace("lbs", "").Trim()) * 0.453592);
                            }
                        }
                    }
                else if (nodoColecion.Count == 3)
                {
                    int cont = 0;
                    foreach (HtmlNode nodo in nodoColecion)
                    {
                        cont++;
                        if (j.Posicion == String.Empty)
                            j.Posicion = nodo.InnerText;
                        else if (j.Peso == 0 && cont == 2)
                        {
                            string[] x = nodo.InnerText.Split(',');
                            string altura = x[0].Replace("\"", "").Replace("'", ".").Replace(" ", "");

                            j.Altura = altura;
                            if (x.Length > 1)
                                j.Peso = Convert.ToInt32(Convert.ToInt32(x[1].Replace("lbs", "").Trim()) * 0.453592);
                        }
                    }
                }
            }


        }
        static void DameDatosExperiencia(string selector, HtmlDocument doc, ref Jugador j)
        {
            HtmlNodeCollection nodoColecion = doc.DocumentNode.SelectNodes(selector);
            if (nodoColecion != null)
            {
                int cont = 0;
                foreach (HtmlNode nodo in nodoColecion)
                {

                    cont++;
                    if (cont == 4 && nodo.InnerText.Contains("year"))
                        j.AnyiosActivo = Convert.ToInt32(nodo.InnerText.Replace("Experience", "").Replace("years", "").Replace("year","").Trim()); 
                }
            }

        }

No hay comentarios:

Publicar un comentario

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...