Как получить все детали, которые находятся внутри тега td, одну за другой с помощью HtmlUnit? - PullRequest
2 голосов
/ 20 июня 2020

до сих пор я успешно получил некоторые детали из подкатегорий, но этого тоже недостаточно. Я должен взять каждую деталь как:

Название продукта: Обувь Детали продукта: обувь Дата: 06.12.2020 Цена: рупий. 2,500

(Совершенно новый)

Здесь Название продукта и Подробная информация о продукте дают тот же результат, но это не тот результат, который я хочу. Я хочу что-то вроде этого:

Название продукта: Обувь Детали продукта: Совершенно новая обувь Highcopy ... Продавец: s unil t Дата: 06.12.2020 Цена: рупий. 2,500 Использование: Совершенно новый

Изображение для этого конкретного товара

enter image description here

for your convenience this is the site I'm scarping

https://hamrobazaar.com/c6-apparels-and-accessories

Код такой:

public static void main(String[] args) throws IOException {
    LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
            "org.apache.commons.logging.impl.NoOpLog");
    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);

    final String url = "https://hamrobazaar.com/c6-apparels-and-accessories"
    WebClient webClient = new WebClient(BrowserVersion.FIREFOX);
    HtmlPage rootPage = webClient.getPage(new URL(url));
    
    List<HtmlTable> tableElements = rootPage
            .getByXPath("/html/body/table/tbody/tr[2]/td/table/tbody/tr[1]/td/table[5]/tbody/tr/td[2]/table");
    try{
    for (int i = 0; i < tableElements.size(); i++) {
        if (i == 0 || 
                i == 1) {
            continue;
        }
        HtmlTableRow row = tableElements.get(i).getRow(0);
        HtmlTableCell productCell = row.getCell(2);
        if(productCell.getElementsByTagName("a").get(0).asText().equals(null)) {
            continue;
        } else {
            String productName = productCell.getElementsByTagName("a").get(0).asText();
            System.out.println("Product Name :"+productName);
        }
        System.out.println("Product Details :" +  productCell.getElementsByTagName("font").get(0).asText() );
        System.out.println("Date :" + row.getCell(3).asText());
        System.out.println("Price :" + row.getCell(4).asText());

    }
} catch (Exception e) {
    System.out.println("Exception raised");
}

} Пожалуйста, помогите мне разобраться. Тонны благодарности

1 Ответ

0 голосов
/ 28 июня 2020

Только что быстро проверил страницу с помощью инструментов разработчика FF для проверки дерева доменов.

Ваш код ищет внутри тега шрифта сведения о продукте

System.out.println("Product Details :" +  productCell.getElementsByTagName("font").get(0).asText() );

но насколько я вижу, текст, который вы ищете, находится за пределами тега шрифта.

введите описание изображения здесь

Я думаю, вы должны использовать родственного брата тэга шрифта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...