Во-первых, измените свою логику для выборки post-feed-item
следующим образом -
Connection conn = Jsoup.connect("https://viblo.asia");
Document doc = conn.userAgent("Mozilla").get();
Elements elements = doc.getElementsByClass("post-feed-item"); //This will get the whole element.
for (Element element : elements) {
String postFeeds = "";
if (element.toString().contains("docker")) {
postFeeds = postFeeds.concat(element.toString());
//save postFeeds to DB
}
}
Дополнительно
/**
* Your parsed element may contain single quote (').
* This will cause error while persisting.
* to avoid this you need to escape single quote (')
* with double single quote ('')
*/
if (element.toString().contains("docker")) {
postFeeds = postFeeds.concat(element.toString().replaceAll("'", "''"));
//save postFeeds to DB
}
Во-вторых, Что если я хочу сохранить каждый элемент вполе в базе данных, которое возможно?
Вам не нужны отдельные столбцы для хранения каждого элемента в базе данных.Однако вы можете сэкономить, но выполнимость зависит от вашего варианта использования.Если вы просто хотите сохранить post-feed-items
только для записи его обратно на веб-страницу, тогда это невозможно.
В-третьих, Как преобразовать элемент в HTML и сохранить?
Вам не нужно преобразовывать element
в html
, но вам нужно преобразовать element
в String
, если вы хотите сохранить его в базе данных.
Все, что вам нужно, этотип столбца типа данных BLOB (его также можно сохранить как VARCHAR , но BLOB безопаснее).
Обновление
Как я могу пройти по всем страницам?
Глядя на исходный код этой страницы, я обнаружил, что вы можете получить общее количество страниц -
Elements pagination = doc.getElementsByAttributeValueMatching("href", "page=\\d");
int totalPageNo = Integer.parseInt(pagination.get(pagination.size() - 2).text());
затем просматривайте каждую страницу.
for(int page = 1; page <= totalPageNo; page++) {
Connection conn = Jsoup.connect("https://viblo.asia/?page=" + page);
//rest of your code
}