如何从具有相同类的不同div中获取数据并将其存储在.csv文件中
问题描述:
我在一个网页URL中有多个div,我必须解析它们具有相同的类名但名称,值和ID不同。例如
。如何从具有相同类的不同div中获取数据并将其存储在.csv文件中
<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>
现在!我想在上面提供的日期之间获取数据。为此,我使用了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)在创建文件之前,我对代码做了一些更改,但没有阅读上面提到的日期。它检索数据的默认日期是从Date = 27/09/2017 toDate = 27/09/2017。
任何人都可以告诉我我哪里出错了吗?
答
您正在尝试getElementsByClass("fromDate")
,而html代码段中的<input>'s
都没有类fromDate
。一个有name='fromDate'
,所以要检索你需要拨打doc.getElementsByAttributeValue("name", "fromDate")
。更多关于上https://jsoup.org/apidocs/index.html?org/jsoup/nodes/Element.html
答
没有与fromDate
类,<tr>
,也不在你的HTML代码<td>
没有元素,但你尝试在你的代码上进行遍历。由于所选元素列表为空,因此for
循环无法启动,因此没有任何内容写入输出CSV文件。
如果您想选择像<input name="fromDate" ...>
元素,你可以使用attribute selector:
Elements inputs = doc.select("input[name=fromDate]");
而且你可以得到<input>
与attr(String)
method值:
String value = inputs.get(0).attr("value");