如何在使用JSOUP时仅使用文本信息直接忽略此标记?

时间:2012-06-20 15:18:03

标签: java jsoup

我正在制作一个刮刀产品价格,我需要忽略像这个网站div类,但它可以改变所有的网站,所以这对我来说真的很麻烦。你可以在这里看到我废弃第一个元素,就像这样

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

然后我再次废弃这个废料标签(标签名称可以更改,所以请在回答前考虑这个)

 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.
            }
         }

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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);
            }
        }

    }

我用控制元素解决了这个问题有一个孩子?那么如果它有孩子,那么检查它们是否匹配正则表达式,如果它们不匹配只是传播孩子以找到可接受的元素。