我正在开发一个功能,我将获得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) {}
}
});
}
我被困在这里。
答案 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调用的返回值。