Как очистить данные о продукте от https://www.jumia.ma/pc-portables/

#java #jsoup

Вопрос:

У меня проблема с получением src img и тегов a с помощью jsoup в весеннем проекте , вместо этого я получаю «1», «5», «данные:изображение/gif;base64,r0lgodlhaqabaiaaaaaap// / yh5baeaaaaaalaaaaaaaaaaaaaabraa7»

Вот код:

 String url1 = "https://www.jumia.ma/pc-portables/";
Document doc1 = Jsoup.connect(url1).get();
 
//List de noms et prix produits et le src des images :
List<Element> noms1 = doc1.getElementsByClass("name");
List<Element> prix1 = doc1.getElementsByClass("prc");
List<Element> images1 = doc1.select("img");
 
for(int i = 0 ; i < 10 ; i  ) {
    if (!noms1.get(i).ownText().isEmpty() amp;amp; !prix1.get(i).ownText().isEmpty()) {
        Produit p = new Produit();
        p.setNom(noms1.get(i).ownText());
        p.setPrix(prix1.get(i).ownText());
        p.setImage(images1.get(i).attr("abs:src"));
        p.setUrl("https://www.jumia.ma/pc-portables/");
        p.setIdcategorie(5);
        produitRepository.save(p);
    }   
}
 

Ответ №1:

Эти запросы просто слишком широки для вашего варианта использования:

 List<Element> noms1 = doc1.getElementsByClass("name");
List<Element> prix1 = doc1.getElementsByClass("prc");
List<Element> images1 = doc1.select("img");
 

Вы всегда можете распечатать результаты своего запроса и убедиться в этом сами. Например:

 List<Element> noms1 = doc1.getElementsByClass("name");
System.out.println(noms1);
 

Вы должны разделить свой запрос на два этапа. Сначала выберите контейнер со списком элементов, затем обработайте каждый элемент. Попробуйте это:

 String url = "https://www.jumia.ma/pc-portables/";
Document doc = Jsoup.connect(url).get();
Element catalog = doc.selectFirst("[data-catalog]");
for (Element item : catalog.select("article")) {
    // name
    System.out.println(item.select(".info > .name").text());
    // price
    System.out.println(item.select(".info > .prc").text());
    // image
    System.out.println(item.selectFirst(".img-c > img").attr("data-src"));
}
 

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

 https://www.jumia.ma/pc-portables/?page=2#catalog-listing