Я пытаюсь найти лучший подход к сохранению данных, которые я проанализировал из документа HTML, когда Jsoup в CSV. У меня проблема с использованием [CSVWriter] [1] - https://mvnrepository.com/artifact/com.opencsv/opencsv/4.6 и записью данных с ним. Пожалуйста, смотрите мой фрагмент кода ниже. Структура данных выглядит следующим образом: инфобокс является основной записной записью с каждым последующим полем внутри нее. CSVWriter выглядит так, как будто это строковый массив, но у него возникают проблемы при переходе от элементов для записи к средству записи CSVData с помощью строкового массива.
Селектор Jsoup возвращает массив элементов из выбора. Например, когда я делаю выбор имени, он возвращает все 9 имен, если на странице 9 записей. Мне нужно собрать эти данные вместе, чтобы каждая строка печаталась в CSV.
InfoBox> Name |E-mail |Телефон |Веб-сайт
Проблема, с которой я сталкиваюсь, заключается в том, как я пытаюсь записать данные в этой строке ниже
writer.writeAll((Iterable<String[]>) infoArray);
Это работает неправильно и ошибки, но я хотел показать, кто явроде после, и если есть кто-то, кто знаком с записью данных из Jsoup Elements в CSV. Спасибо
String filePath ="c:/results.csv";
// first create file object for file placed at location
// specified by filepath
File file = new File(filePath);
try {
// create FileWriter object with file as parameter
FileWriter outputfile = new FileWriter(file);
// create CSVWriter object filewriter object as parameter
CSVWriter writer = new CSVWriter(outputfile);
String[] header = { "Name", "Phone", "Street","State","City","Zipcode" };
Elements infobox = doc.select(".info");
List<String> infoArray = new ArrayList<>();
for(int i = 0; i < infobox.size(); i++){
infobox.get(i).select(".business-name > span");
infoArray.add(infobox.get(i).select(".business-name > span").text());
infoArray.add(infobox.get(i).select(".phones.phone.primary").text());
infoArray.add(infobox.get(i).select(".street-address").text());
infoArray.add(infobox.get(i).select(".state").text());
infoArray.add(infobox.get(i).select(".city").text());
infoArray.add(infobox.get(i).select(".zip").text());
}
writer.writeNext(header);
//How to write data in order to match each record accordingly?
//Data should be written to CSV like the following example under each header into each corrosponding row
//name, phone, street
writer.writeAll((Iterable<String[]>) infoArray);
for(String ia : infoArray){
}
// closing writer connection
writer.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}