2

製品価格をスクレイピングするスクレイパーを作成しています。このサイトの div クラスのように無視する必要がありますが、すべての Web サイトで変更可能であるため、これは本当に問題です。あなたはここで私が最初の要素をこするのを見ることができます、そしてそれはこのようになります

1 - <div class="ProductPrice"> 
     <span id="ctl00_ContentPlaceHolder1_Category1_ctrl_0_ctrl_7_mainGrid_ctl00_PUnit_lblPriceWithTax">47,00 TL</span> 
    </div>

次に、2番目のタグをスクレイプします(タグ名は変更可能であるため、回答の前にこれを検討してください)

 2 - <span id="ctl00_ContentPlaceHolder1_Category1_ctrl_0_ctrl_7_mainGrid_ctl00_PUnit_lblPriceWithTax">47,00 TL</span>

私のコードは次のとおりです。

Elements allElements = newDocument.getAllElements();
        for (int j = 0; j < allElements.size(); j++) {
            Element element = allElements.get(j);
            if (element.text().matches(regex){
             // Writing to console.
            }
         }
4

2 に答える 2

0
   while (loopBool)
    {
        if (element.children() != null)
        {
            if (element.children().size() >= k)
            {
                if (!element.child(k).text().matches(regex))
                {

                    k++;
                }
                else
                {
                    element.empty();
                    loopBool = false;
                }

            }
            else
            {
                k = 0;
                element = element.child(k);
            }
        }

    }

要素を制御することでこの問題を解決しました ? 次に、子がある場合は正規表現と一致することを確認し、一致しない場合は子を循環させて許容可能な要素を見つけます。

于 2012-06-22T06:45:49.527 に答える
0

私は試してみます(テストされていないコード):

Elements elements = newDocument.select("div[class*=ProductPrice]");
for (Element element : elements) {
    Element inner = element.html();
    //do whatever you want with "inner", containing your span
}

編集:あなたのコメントの後Elements elements = newDocument.select("*:matches(regex)");、価格を抽出するために必要な正規表現を「正規表現」とともに使用する必要があると思います。これにより、を使用せずに、必要な要素のリストが得られるはずですelement.html();

Elements elements = newDocument.select("*:matches("+regex+")");
for (Element element : elements) {
    //do whatever you want with "inner", containing your span
}
于 2012-06-21T07:56:30.533 に答える