c# - metatags - online meta tags wizard
Recoger datos de una página web, analizarlos para piezas especĂficas y mostrarlos (3)
He estado usando este sitio durante mucho tiempo para encontrar respuestas a mis preguntas, pero no pude encontrar la respuesta en esta pregunta.
Estoy trabajando con un grupo pequeño en un proyecto de clase. Estamos construyendo un pequeño sitio web de "juegos" que permite a las personas registrarse, organizar un juego que quieren intercambiar y aceptar intercambios de otros o solicitar un intercambio.
Tenemos el sitio funcionando mucho antes de lo programado, 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 yc # en visual studio 2012) obtener la página correcta del juego en metacritic, extraer sus datos, analizarlos para partes específicas y luego mostrar los datos en nuestra página.
Esencialmente, cuando elige un juego para el que quiere intercambiar, queremos que se muestre una pequeña división con la información y la clasificación del juego. Estoy deseando hacerlo de esta manera para aprender más y obtener algo de este proyecto con el que no tenía 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 intentando averiguar si necesito intentar 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 los datos, no sé cómo extraer la información específica que necesito.
Una de las cosas que no lo hace tan fácil es que estoy aprendiendo c ++ junto con c # y asp, así que continúo cruzando los cables. Si alguien pudiera apuntarme en la dirección correcta sería una gran ayuda. Gracias
Miré y Metacritic.com no tiene una API.
Puede usar un 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..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 metacetiquetas de Metacritic. Aquí está la información que tienen disponible en las etiquetas meta:
- og: titulo
- og: tipo
- og: url
- og: imagen
- og: nombre de sitio
- og: descripción
El formato de cada etiqueta es: meta name="og:title" content="In a World..."
Recomiendo Dcsoup . Hay un paquete nuget para él y usa selectores css, por lo que es familiar si usa jquery. He probado 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 . Lo amo absolutamente.
var doc = Dcsoup.Parse(new Uri("http://www.metacritic.com/game/pc/fallout-4"), 5000);
// <span itemprop="ratingValue">86</span>
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);
Este pequeño ejemplo utiliza HtmlAgilityPack y utiliza los selectores XPath
para obtener 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 forma fácil de obtener el XPath
para un elemento dado es usar las herramientas del desarrollador de su navegador web (yo uso Chrome):
- Abra las Herramientas del desarrollador ( F12 o Ctrl + Shift + C en Windows o Command + 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".
Puede pegarlo exactamente así en c # (como se muestra en mi código), pero asegúrese de evitar las comillas.
Debe asegurarse de utilizar algunas técnicas de manejo de errores, ya que el Desguace Web puede causar errores si cambian el formato HTML de la página.