如何从具有相同类的不同div获取数据并将其存储在.csv文件中

时间:2017-09-27 11:50:01

标签: java csv jsoup

我在网页网址中有多个div,我必须解析它们具有相同的类名但名称,值和ID不同。
例如。



<div class="form-group">
  <input class="form-control is-datepick" name="fromDate" value="01/07/2017" type="text" id="popupDatepicker" placeholder="Date">
  <input class="form-control is-datepick" name="toDate" value="26/09/2017" type="text" id="popupDatepicker2" placeholder="Date">
</div>
&#13;
&#13;
&#13;

现在!我想在上面提供的日期之间获取数据。为此,我使用了jsoup库。

doc = Jsoup.connect(tempUrl).timeout(10000).data("fromDate", "01/07/2017")
                .data("toDate", dateFormat.format(date))
                .data("type", "text")
                .data("search", "search")
                .timeout(100000).get();

我用getElementsByClass()来获取数据。但是,遗憾的是它不起作用。

File fold = new File("D:\\KSE\\TMP\\NCCPL-YEARLY.csv");
fold.delete();
File fnew = new File("D:\\KSE\\TMP\\NCCPL-YEARLY.csv");
for (Element table : doc.getElementsByClass("fromDate"))
{

    for (Element trElement : table.getElementsByTag("tr")) {

        trElement2 = trElement.getElementsByTag("tr");
        tdElements = trElement.getElementsByTag("td");
        FileWriter sb = new FileWriter(fnew, true);

        //if (table.hasClass("marketData")) { //&&(tdElements.hasClass("tableHead")&&tdElements.hasClass("tableSubHead"))
        for (Iterator<Element> it = tdElements.iterator(); it.hasNext();) {
            if (it.hasNext()&& i>0) {
                ///sb.append(" | ");
                sb.append(" \r\n ");
            }

            for (Iterator<Element> it2 = tdElements.iterator(); it.hasNext();) {
                Element tdElement2 = it.next();
                final String content = tdElement2.text().replace(",", "");
                if (it2.hasNext()) {

                    sb.append(formatData(content));
                    sb.append("   |   ");

                }

            }

            System.out.println(sb.toString());
            sb.flush();
            sb.close();
            i++;
        }

        System.out.println(sampleList.add(tdElements));


    }

}
}

程序已成功编译并且没有出错。目前,我面临两个问题 1)它没有创建任何csv文件 2)我在创建文件之前对代码进行了一些更改,但没有阅读上面提到的日期。它检索默认日期的数据,该日期是日期= 27/09/2017至日期= 27/09/2017 谁能告诉我哪里出错了?

2 个答案:

答案 0 :(得分:0)

您正在尝试getElementsByClass("fromDate"),而html代码段中的<input>'s都没有fromDate类。一个人有name='fromDate',因此要检索您需要致电doc.getElementsByAttributeValue("name", "fromDate")。有关https://jsoup.org/apidocs/index.html?org/jsoup/nodes/Element.html

的更多信息

答案 1 :(得分:0)

HTML代码中没有fromDate类,<tr><td>的元素,但您尝试在代码中对它们进行迭代。由于所选元素列表为空,for循环无法启动,因此不会将任何内容写入输出CSV文件。

如果您想选择<input name="fromDate" ...>等元素,可以使用attribute selector

Elements inputs = doc.select("input[name=fromDate]");

您可以使用attr(String) method

获取<input>的值
String value = inputs.get(0).attr("value");