2

我正在制作一个刮取产品价格的刮刀,我需要像这个网站 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.
            }
         }
4

2 回答 2

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 回答
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 回答