come posso ottenere un valore in continua evoluzione da una stringa c #
-
08-07-2019 - |
Domanda
Sto lavorando a un programma che otterrà automaticamente le statistiche dei tuoi personaggi e quant'altro dall'armeria wow. Ho già l'html e posso identificare dove si trova la stringa, ma ho bisogno di ottenere il " this.effective " valore, che in questo caso è 594. Ma dal momento che è in continua evoluzione (e lo sono anche gli altri valori, non posso prenderlo in una certa posizione. Qualsiasi aiuto sarebbe molto apprezzato.
Grazie
Matt --------- Questo è lo snippet html:
function strengthObject() {
this.base="168";
this.effective="594";
this.block="29";
this.attack="1168";
this.diff = this.effective - this.base;
Soluzione
Puoi farlo usando le espressioni regolari:
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...
}
}
}
Altri suggerimenti
È molto più facile estrarre le informazioni dalla versione XML del sito Web.
Se si effettua una richiesta a un URL come questo (solo con un nome di carattere valido), si ottiene un documento XML che è possibile utilizzare un parser XML per estrarre facilmente i dati.
http://eu.wowarmory.com/character-sheet .xml r = Nordrassil & amp;? CN = qualcuno
Gli URL sono gli stessi che vedi nel tuo browser web.
Nota che DEVI impostare il campo User Agent della richiesta in modo che corrisponda a quello di un browser supportato che supporta la versione XML del file o ottieni invece HTML. Uso " Mozilla / 5.0 Firefox / 2.0.0.1 " come agente utente nel mio programma e funziona bene.
Oh, inoltre, non fare più di alcune richieste al secondo, o una media di più di una richiesta ogni 3 o 4 secondi o il sito blocca il tuo IP per alcune ore ...
Un modo sarebbe usare un'espressione regolare per estrarre questo valore dalla fonte HTML:
this.effective="(\d+)"
Nota che lo scraping HTML non è una soluzione ideale (ad esempio, potrebbe rompersi quando cambia il formato dell'HTML), tuttavia non conosco il "wow arsenale"; e quali altri modi ci sono per ottenere queste informazioni.