通过Jsoup android在HTML页面中迭代数据

问题描述 投票:0回答:1

我正在开发一个功能,我得到HTML页面,从那里我必须提取所需的数据(产品图像,产品名称,产品价格等),并在Recylerview中显示

对于解析HTML页面,我使用Jsoup库:https://jsoup.org/

网址https://www.snapdeal.com/search?keyword=watch&sort=plrty

我是HTML页面的新概念,不知道如何在数组中提取我所需的数据。

我的android代码:

private void observeLiveData () {

    snapdealViewModel.searchProduct("watch", "plrty").observe(this, new Observer<Response<ResponseBody>>() {
        @Override
        public void onChanged(@Nullable Response<ResponseBody> responseBodyResponse) {

            try {

                String html = responseBodyResponse.body().toString();
                Document document = Jsoup.parse(html);
                Elements elemensts = document.select("product-tuple-image");

                for (Element element : elemensts) {

                }
            } catch (Exception e) {}
        }
    });
}

我被困在这里。

java android jsoup html-parsing
1个回答
3
投票

假设你上面的问题中的html提供了与我调用Document doc = Jsoup.connect("https://www.snapdeal.com/search?keyword=watch&sort=plrty").get();时相同的内容,那么这......

String html = responseBodyResponse.body().toString();

Document document = Jsoup.parse(html);

Elements elements = doc.select("div.product-tuple-description");
for (Element element : elements) {
    String link = element.select("a.dp-widget-link").first().attr("href");
    String title = element.select("p.product-title").first().attr("title");
    String price = element.select("span.product-price").first().text();

    System.out.println(String.format("Link=%s, Title=%s, Price=%s", link, title, price));
}

...将打印:

Link=https://www.snapdeal.com/product/iik-collection-black-analog-watch/680673440602, Title=IIK Collection Black Analog Watch, Price=Rs. 227
Link=https://www.snapdeal.com/product/rosra-multicolor-analog-watches-pack/638328550475, Title=Rosra Multicolor Analog Watches - Pack of 2, Price=Rs. 273
Link=https://www.snapdeal.com/product/curren-brown-analog-watch/674386848559, Title=Curren Brown Analog Watch, Price=Rs. 179
Link=https://www.snapdeal.com/product/abrexo-abx1157silver-analog-watch-for/684706734736, Title=Abrexo Abx-1157-Silver Analog Watch - For Men, Price=Rs. 499
... etc

笔记:

  • 使用.first()很脆弱,你可能想要在找到正确的元素之前测试这些select调用的返回值。
  • select方法使用CSS选择器语法(更多细节in the docs),但简要介绍; “a.dp-widget-link”表示“查找类型为'a'的所有元素,其类'dp-widget-link'”。
© www.soinside.com 2019 - 2024. All rights reserved.