如何从 https://www.jumia.ma/pc-portables/ 抓取产品数据

How to scrape product data from https://www.jumia.ma/pc-portables/

我在 spring 项目上使用 jsoup 获取 img 的 src 和标签时遇到问题,我得到的是 '1'、'5'、'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'

代码如下:

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() && !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);
    }   
}

这些查询对于您的用例来说太宽泛了:

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);

您应该将查询分成两个步骤。首先,select 带有项目列表的容器,然后处理每个项目。试试这个:

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