文字列C#から常に変化する値を取得するにはどうすればよいですか
-
08-07-2019 - |
質問
私は、Wow Armoryからキャラクターの統計情報などを自動的に取得するプログラムに取り組んでいます。私はすでにhtmlを持っているので、文字列の場所を特定できますが、「this.effective」を取得する必要があります値は、この場合は594です。しかし、その値は常に変化するため(他の値も同様です)、特定の位置を取ることはできません。どんな助けでも大歓迎です。
ありがとう
マット ---------これはhtmlスニペットです:
function strengthObject() {
this.base="168";
this.effective="594";
this.block="29";
this.attack="1168";
this.diff = this.effective-this.base;
解決
正規表現を使用して実行できます:
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...
}
}
}
他のヒント
XMLバージョンのWebサイトから情報を抽出する方がはるかに簡単です。
このようなURL(有効な文字名のみ)にリクエストを行うと、XMLパーサーを使用して簡単にデータを抽出できるXMLドキュメントが返されます。
http://eu.wowarmory.com/character-sheet .xml?r = Nordrassil& cn = Someone
URLは、Webブラウザに表示されるものと同じです。
ただし、リクエストのユーザーエージェントフィールドを、ファイルのXMLバージョンをサポートするサポート対象ブラウザーのフィールドに設定するか、代わりにHTMLを取得する必要があることに注意してください。 「Mozilla / 5.0 Firefox / 2.0.0.1」を使用します;私のプログラムのユーザーエージェントとして、それは正常に動作します。
ああ、また、1秒に2、3回または4秒ごとに複数のリクエストを平均して、またはサイトが数時間あなたのIPをブロックしないでください...
1つの方法は、正規表現を使用してHTMLソースからこの値を抽出することです。
this.effective="(\d+)"
HTMLスクレイピングは理想的な解決策ではないことに注意してください(たとえば、HTMLの形式が変更されると壊れる可能性があります)。この情報を取得する他の方法があります。