Extraer datos de una página web, analizarla para piezas específicas y mostrarla

He estado usando este sitio durante mucho tiempo para encontrar respuestas a mis preguntas, pero no he podido encontrar la respuesta en este.

Estoy trabajando con un pequeño grupo en un proyecto de clase. Debemos construir un pequeño sitio web de “comercio de juegos” que permita a las personas registrarse, poner en juego un juego que deseen comercializar, y aceptar intercambios de otros o solicitar un intercambio.

Tenemos el sitio funcionando mucho antes de lo previsto, por lo que estamos tratando de agregar más al sitio. Una cosa que quiero hacer yo mismo es vincular los juegos que se ponen en Metacritic.

Esto es lo que necesito hacer. Necesito (usando asp y c # en visual studio 2012) obtener la página de juego correcta en metacrítico, extraer sus datos, analizarlos para partes específicas y luego mostrar los datos en nuestra página.

Esencialmente, cuando eliges un juego para el que quieres cambiar, queremos que se muestre un pequeño div con la información y clasificación del juego. Quiero hacerlo de esta manera para aprender más y obtener algo de este proyecto con el que no tuve que empezar.

Me preguntaba si alguien podría decirme por dónde empezar. No sé cómo extraer datos de una página. Todavía estoy tratando de averiguar si tengo que tratar de escribir algo para buscar automáticamente el título del juego y encontrar la página de esa manera o si puedo encontrar la manera de ir directamente a la página del juego. Y una vez que obtuve la información, no sé cómo extraer la información específica que necesito de ella.

Una de las cosas que no hace que esto sea tan fácil es que estoy aprendiendo c ++ junto con c # y asp, así que sigo cruzando cables. Si alguien pudiera señalarme en la dirección correcta, sería una gran ayuda. Gracias

Este pequeño ejemplo usa HtmlAgilityPack y usa los selectores XPath para llegar a los elementos deseados.

 protected void Page_Load(object sender, EventArgs e) { string Url = "http://www.metacritic.com/game/pc/halo-spartan-assault"; HtmlWeb web = new HtmlWeb(); HtmlDocument doc = web.Load(Url); string metascore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText; string userscore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[2]/div[1]/div/div[2]/a/span[1]")[0].InnerText; string summary = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[2]/div[1]/ul/li/span[2]/span/span[1]")[0].InnerText; } 

Una manera fácil de obtener XPath para un elemento dado es usar su navegador web (yo uso Chrome) Herramientas para desarrolladores:

  • Abra las Herramientas del desarrollador ( F12 o Ctrl + Shift + C en Windows o Comando + Shift + C para Mac).
  • Seleccione el elemento en la página para la que desea el XPath.
  • Haga clic derecho en el elemento en la pestaña “Elementos”.
  • Haga clic en “Copiar como XPath”.

Puedes pegarlo exactamente así en c # (como se muestra en mi código), pero asegúrate de evitar las comillas.

Debe asegurarse de usar algunas técnicas de manejo de errores porque el Desguace Web puede causar errores si cambian el formato HTML de la página.

Recomiendo Dcsoup . Hay un paquete nuget para él y usa selectores CSS, por lo que es familiar si usas jquery. He intentado con otros, pero es el mejor y más fácil de usar que he encontrado. No hay mucha documentación, pero es de código abierto y un puerto de la biblioteca java jsoup que tiene buena documentación . Me encanta.

 var doc = Dcsoup.Parse(new Uri("http://www.metacritic.com/game/pc/fallout-4"), 5000); // 86 var ratingSpan = doc.Select("span[itemprop=ratingValue]"); int ratingValue = int.Parse(ratingSpan.Text); // selectors match both critic and user scores var scoreDiv = doc.Select("div.score_summary"); var scoreAnchor = scoreDiv.Select("a.metascore_anchor"); int criticRating = int.Parse(scoreAnchor[0].Text); float userRating = float.Parse(scoreAnchor[1].Text); 

Miré y Metacritic.com no tiene una API.

Puede utilizar una HttpWebRequest para obtener los contenidos de un sitio web como una cadena.

 using System.Net; using System.IO; using System.Windows.Forms; string result = null; string url = "http://www.stackoverflow.com"; WebResponse response = null; StreamReader reader = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; response = request.GetResponse(); reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); result = reader.ReadToEnd(); } catch (Exception ex) { // handle error MessageBox.Show(ex.Message); } finally { if (reader != null) reader.Close(); if (response != null) response.Close(); } 

Luego puede analizar la cadena de los datos que desea, aprovechando el uso de metatags de Metacritic. Aquí está la información que tienen disponible en las tags meta:

  • og: título
  • og: tipo
  • og: url
  • og: imagen
  • og: site_name
  • og: descripción

El formato de cada etiqueta es: meta name="og:title" content="In a World..."