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

时间:2018-01-03 14:32:11

标签: java android jsoup html-parsing

我正在开发一个功能,我将获得HTML页面,我必须从中提取所需数据(产品图片,产品名称,产品价格等)并在Recylerview

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

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

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

我的安卓代码:

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

我被困在这里。

1 个答案:

答案 0 :(得分: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'类。”