¿Cómo obtengo un valor siempre cambiante de una cadena C #?
-
08-07-2019 - |
Pregunta
Estoy trabajando en un programa que obtendrá automáticamente las estadísticas de tus personajes y otras cosas del arsenal de wow. Ya tengo el html, y puedo identificar dónde está la cadena, pero necesito obtener el " this.effective " valor, que en este caso es 594. Pero dado que siempre está cambiando (y también lo son los otros valores, no puedo tomar una posición determinada. Cualquier ayuda sería muy apreciada.
Gracias
Matt --------- Este es el fragmento html:
function strengthObject() {
this.base="168";
this.effective="594";
this.block="29";
this.attack="1168";
this.diff = this.effective - this.base;
Solución
Puedes hacerlo usando expresiones regulares:
using System;
using System.Text.RegularExpressions;
class Program
{
public static void Main()
{
string html = @" function strengthObject() {
this.base=""168"";
this.effective=""594"";
this.block=""29"";
this.attack=""1168"";";
string regex = @"this.effective=""(\d+)""";
Match match = Regex.Match(html, regex);
if (match.Success)
{
int effective = int.Parse(match.Groups[1].Value);
Console.WriteLine("Effective = " + effective);
// etc..
}
else
{
// Handle failure...
}
}
}
Otros consejos
Es mucho más fácil extraer la información de la versión XML del sitio web.
Si realiza una solicitud a una URL como esta (solo con un nombre de carácter válido), obtiene un documento XML en el que puede usar un analizador XML para extraer fácilmente los datos.
http://eu.wowarmory.com/character-sheet .xml? r = Nordrassil & amp; cn = Alguien
Las URL son las mismas que ve en su navegador web.
Sin embargo, tenga en cuenta que DEBE configurar el campo Agente de usuario de la solicitud para que sea el de un navegador compatible que admita la versión XML del archivo o, en su lugar, recupere HTML. Yo uso "Mozilla / 5.0 Firefox / 2.0.0.1" como agente de usuario en mi programa y funciona bien.
Ah, tampoco haga más de unas pocas solicitudes en segundo, o un promedio de más de una solicitud cada 3 o 4 segundos o el sitio bloquea su IP durante unas horas ...
Una forma sería usar una expresión regular para extraer este valor de la fuente HTML:
this.effective="(\d+)"
Tenga en cuenta que el raspado de HTML no es una solución ideal (por ejemplo, puede romperse cuando cambia el formato del HTML), sin embargo, no sé sobre el '' wow armory '' y qué otras formas hay para obtener esta información.