JSOUP Войдите в систему, затем проанализируйте и найдите цену в HTML-строке

У меня программа в основном разобралась. Мне просто нужно вытащить цену из этой строки HTML: <li class=""><b class="">Your Price:</b> $23.51&nbsp; &nbsp; <b class="">You Save:</b> $11.48</li> Мне просто нужно "23,51" из этой строки, тот, который указан в качестве вашей цены.

Я обновил код, чтобы отразить то, с чем я сейчас работаю. Я не уверен, каким будет следующий шаг.

Я не знаю, где добавить в разборе. Мне нужно, чтобы взять URL из электронной таблицы, а затем поместить данные о ценах в соответствующий столбец (PRICE_COLUMN).

Вот мой код, спасибо Кристиану.

public class Scraper {


private static final int URL_COLUMN = 2; // Column C
private static final int SKU_COLUMN = 3; // Column D
private static final int SALE_COLUMN = 4;// Column E
private static final int PRICE_COLUMN = 5; //Column F

public static void main(final String[] args) throws Exception {

    Workbook originalWorkbook = Workbook.getWorkbook(new File("C:/Users/MSI/Desktop/original.xls"));
    WritableWorkbook workbook = Workbook.createWorkbook(new File("C:/Users/MSI/Desktop/updated.xls"), originalWorkbook);
    originalWorkbook.close();
    WritableSheet sheet = workbook.getSheet(0);
    int currentRow = 1;
    Cell cell;
    while (!(cell = sheet.getCell(URL_COLUMN, currentRow)).getType().equals(CellType.EMPTY)) {
        String url = cell.getContents();
        System.out.println("Parsing URL: " + url);
        String SKU = parseUrlWithJsoupAndGetProductSKU(url);
        String price = parseUrlWithJsoupAndGetProductPrice(url);
        String sale= parseUrlWithJsoupAndGetSale(url);
        System.out.println("SKU: " + SKU);
        System.out.println("Regular price: " + price);
        System.out.println("Sale price: " + sale);
        Label cellWithSKU = new Label(SKU_COLUMN, currentRow, SKU);
        sheet.addCell(cellWithSKU);
        Label cellWithSale = new Label(SALE_COLUMN, currentRow, sale);
        sheet.addCell(cellWithSale);
        Label cellWithPrice = new Label(PRICE_COLUMN, currentRow, price);
        sheet.addCell(cellWithPrice);
        currentRow++;
    }
    workbook.write();
    workbook.close();

}

private static String parseUrlWithJsoupAndGetProductSKU(String url) throws IOException {
    try {
        Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
        return doc.select("#product_id_num").text();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
private static String parseUrlWithJsoupAndGetSale(String url) throws IOException {
    try {
        Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
        return doc.select("#NA").text();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
private static String parseUrlWithJsoupAndGetProductPrice(String url) throws IOException {
    try {
        Document doc = Jsoup.connect(url).userAgent("Mozilla").get();
        System.out.println(getPrice(doc));
        return doc.select("#price").text();
        private static String price(Document doc) {
            // select all <li> inside <ul class="small">
            Elements liElements = doc.select("ul.small>li");
            for (Element li : liElements) {
                // find "List Price:"
                if (li.text().contains("List Price:")) {
                    // remove <b> with contents
                    li.select("b").remove();
                    // there's only price left in <li>
                    return li.text();
                }
            }
            return "not found";
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

1 ответ

Объяснение в комментариях:

public static void main(final String[] args) throws IOException {
    Document doc = Jsoup
            .parse("<ul class=\"small\">    <li class=\"\"><b class=\"\">Description:</b> . (Import)</li> <li class=\"\"><b class=\"\">List Price:</b> $123</li> <li class=\"\"><b class=\"\">Your Price:</b> $***&nbsp; &nbsp; <b class=\"\">You Save:</b> $***</li> <li class=\"stockStatus\"><b class=\"\">Stock Status:</b> 1</li> <h3 class=\"additionalInfo\"><span class=\"\">Additional Information</span></h3> <li class=\"additional\">Uses extension part# ***</li> <li class=\"additional\">Replaces GM# ***</li> </ul> ");
    System.out.println(getPrice(doc));
}

private static String getPrice(Document doc) {
    // select all <li> inside <ul class="small">
    Elements liElements = doc.select("ul.small>li");
    for (Element li : liElements) {
        // find "List Price:"
        if (li.text().contains("List Price:")) {
            // remove <b> with contents
            li.select("b").remove();
            // there's only price left in <li>
            return li.text();
        }
    }
    return "not found";
}
Другие вопросы по тегам