0

私はあなたのキャラクターの統計などをすごい武器庫から自動的に取得するプログラムに取り組んでいます。私はすでにhtmlを持っていて、文字列がどこにあるかを識別できますが、「this.effective」値(この場合は594)を取得する必要があります。しかし、常に変化するため(他の値も変化するため、できません)ただそれを特定の位置に置いてください。どんな助けでも大歓迎です。

ありがとう

Matt ---------これはhtmlスニペットです:

    function strengthObject() {
        this.base="168";
        this.effective="594";
        this.block="29";
        this.attack="1168";

this.diff = this.effective --this.base;


4

3 に答える 3

1

正規表現を使用してそれを行うことができます:

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...
        }
    }
}
于 2009-11-29T17:47:08.353 に答える
1

XMLバージョンのWebサイトから情報を抽出する方がはるかに簡単です。

このようなURL(有効な文字名のみ)にリクエストを送信すると、XMLパーサーを使用してデータを簡単に抽出できるXMLドキュメントが返されます。

http://eu.wowarmory.com/character-sheet.xml?r=Nordrassil&cn=Someone

URLは、Webブラウザに表示されるものと同じです。

ただし、リクエストのユーザーエージェントフィールドは、ファイルのXMLバージョンをサポートするサポートされているブラウザのフィールドに設定する必要があります。そうしないと、代わりにHTMLが返されます。プログラムのユーザーエージェントとして「Mozilla/5.0Firefox / 2.0.0.1」を使用していますが、正常に動作します。

ああ、また、1秒間に数回以上のリクエストを行わないでください。または、3秒または4秒ごとに平均1回以上のリクエストを行うか、サイトが数時間IPをブロックします...

于 2010-01-04T14:34:43.177 に答える
0

1つの方法は、正規表現を使用してHTMLソースからこの値を抽出することです。

this.effective="(\d+)"

HTMLスクレイピングは理想的な解決策ではないことに注意してください(たとえば、HTMLの形式が変更されると壊れることがあります)が、「すごい武器庫」やこの情報を取得する他の方法についてはわかりません。

于 2009-11-29T17:47:02.210 に答える