使用Jsoup获取图像

问题描述:

首先对不起我的英文不好。编程新手(2年拼贴)。我试图从zomato获取图像。是的,API只给我们链接。 (https://www.zomato.com/jakarta/ayam-keprabon-express-tambora/photos),所以我需要手动从网络上获取图像。使用Jsoup获取图像

我已经在使用假名的iOS中完成了这项工作。

func parseHTML(html:String){ 
    if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8){ 
     for show in doc.css("div[class^='photobox']"){ 
      let getA = show.css("a").first 
      let image = getA!.css("img[class^='res-photo']").first?["data-original"] 
      let imageUrl = image!.components(separatedBy: "?")[0] 
      linkImageArray.append(imageUrl) 
      print("jumlah gambar = \(linkImageArray.count)") 
     } 
    } 
    foodCV.reloadData() 
} 

而我的问题如何在Jsoup做到这一点?

这怎么弄到HTML

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body().toString()); 
      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

现在即时通讯坚持了这一点。 Photobox.toString为空。

public void getPhotos(String stringResponse){ 
    Document doc = Jsoup.parse(stringResponse); 
    Elements photobox = doc.getElementsByClass("container"); 
    Log.i("html : ",""+photobox.toString()); 
    Toast.makeText(this, photobox.toString(), Toast.LENGTH_SHORT).show(); 
    for (Element data:photobox){ 
     Log.i("html : ",""+data.select("img[class^='res-photo']")); 
     Log.i("html : ",""+data.select("img[class^='res-photo']").first().select("data-original")); 
     data.select("img[class^='res-photo']").first().select("data-original"); 
    } 
} 

而且我确定我不能使用这个Jsoup: how to get an image's absolute url?。它会返回所有图像。我想获得'数据原创'的img。

<img class='res-photo-thumbnail thumb-load lazy-photo-inner' 
     src='https://b.zmtcdn.com/images/photoback.png' 
     title='Coffee Sisters - Coffee Sisters&#039;s photo' 
     alt='Coffee Sisters - Coffee Sisters&#039;s photo' 
     data-original='https://b.zmtcdn.com/data/reviews_photos/e4a/04b8e0669945bfe03fd0789cbd42be4a.jpg?fit=around%7C200%3A200&amp;crop=200%3A200%3B%2A%2C%2A' 
     data-type='res' 
     data-photo_id='u_NDY5NzEwNzI1MD' 
     data-index='27' 
     data-category='all' 
     /> 
+0

的可能的复制[Jsoup:如何获取图像的绝对URL](https://*.com/questions/4875064/jsoup-how-to-get-an-images-absolute-url) –

+0

@KarlNicholas它会返回所有的img标签,我只需要与'data-original'获得img。 – Acless

只是改变一些代码行,我得到我想要的东西〜

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body()); 


      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

我只能改变通过response.body,而不是response.body.string.toString。

public void getPhotos(ResponseBody body){ 
    try { 
     Document doc = Jsoup.parse(body.string()); 
     Elements photobox = doc.select("img[class=res-photo-thumbnail thumb-load lazy-photo-inner]");Toast.LENGTH_SHORT).show(); 
     for (Element data : photobox) { 
      String imagelink = data.attr("data-original").toString(); 
      String[] parts = imagelink.split("[?]"); 
      imageList.add(parts[0]); 
      Log.i("imagelink : ",parts[0]); 
     } 
    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
}