0

必要な貴重なデータをそこからテキストファイルに抽出できるように、htmlページをスクリーンスクレイピングしようとしています。これまでのところ、htmlページ内でこれに出くわすまでは順調に進んでいます。

<td> <b>In inventory</b>: 0.3 &#107;&#103;<br /><b>Equipped</b>: -4.5&#160;kg

ページのhtmlコードの上記の行は、多くの場合異なります。したがって、(含まれているものに関係なく)行をスキャンして重み(この場合は0.3-4.5)をスキャンし、このデータを2つの別々のdoubleに格納する方法を理解する必要があります。

ダブルinventoryWeight= 0.3
ダブル装備重量= -4.5

これを純粋なJavaを使用して実行したいと思います。必要に応じて、これを実現するためにJavaアプリケーション内で実行できるサードパーティプログラムについて遠慮なく通知してください(ただし、その場合は鮮やかに説明してください)。

たくさんありがとう!

4

2 に答える 2

1

RegExは通常、テキストをスクレイピングするための優れたソリューションです。括弧は「キャプチャグループ」を示します。これは保存され、Matcher.group()を使用してアクセスできます。[-。\d]+は、1つ以上の数字(0〜9)、ピリオド、およびハイフンで構成されるすべてのものに一致します。。*はすべてに一致します(ただし、改行文字と一致しない場合もあります)。ここでは、気にしないものすべてを本質的に「捨てる」ために使用されています。

import java.util.regex.*;

public class Foo {
    public static void main(String[] args) {
        String regex = ".*inventory<\\/b>: ([-.\\d]+).*Equipped<\\/b>: ([-.\\d]+).*";
        String text = "<td> <b>In inventory</b>: 0.3 &#107;&#103;<br /><b>Equipped</b>: -4.5&#160;kg";

        // Look for a match
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        // Get the matched text
        if (matcher.matches()) {
            String inventoryWeight = matcher.group(1);
            String equippedWeight = matcher.group(2);

            System.out.println("Inventory weight: " + inventoryWeight);
            System.out.println("Equipped weight: " + equippedWeight);
        } else {
            System.out.println("No match!");
        }
    }
}
于 2012-07-29T19:31:35.120 に答える
0

このHTMLを文字列として持っていますか?その場合は、を検索して<b>Equipped</b>ください。次に、<b>Equipped</b>終了文字の位置に1を加えたものを取得します。次に、数字やドットでなくなるまでcharをcharごとに追加して、新しい文字列を作成します。

文字列変数にこれらの数値がある場合は、次を使用してそれらをDoubleに変換するだけです。double aDouble = Double.parseDouble(aString)

于 2012-07-29T19:30:03.053 に答える