Java 使用Jsoup获取图像
首先,对不起我的英语不好。我是编程新手(大学2年)。我正在尝试从zomato那里获取图像。是的,API只给我们链接。()所以我需要手动从web获取图像 我已经在iOS中使用Kana完成了这项工作Java 使用Jsoup获取图像,java,android-studio,jsoup,retrofit2,Java,Android Studio,Jsoup,Retrofit2,首先,对不起我的英语不好。我是编程新手(大学2年)。我正在尝试从zomato那里获取图像。是的,API只给我们链接。()所以我需要手动从web获取图像 我已经在iOS中使用Kana完成了这项工作 func parseHTML(html:String){ if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8){ for show in doc.css("div[class^='photobox'
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");
}
}
我肯定我不能用这个。它将返回所有图像。我想获得带有“原始数据”的img
<img class='res-photo-thumbnail thumb-load lazy-photo-inner'
src='https://b.zmtcdn.com/images/photoback.png'
title='Coffee Sisters - Coffee Sisters's photo'
alt='Coffee Sisters - Coffee Sisters's photo'
data-original='https://b.zmtcdn.com/data/reviews_photos/e4a/04b8e0669945bfe03fd0789cbd42be4a.jpg?fit=around%7C200%3A200&crop=200%3A200%3B%2A%2C%2A'
data-type='res'
data-photo_id='u_NDY5NzEwNzI1MD'
data-index='27'
data-category='all'
/>
只要更改几行代码,我就能得到我想要的~
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");
}
}
只要修改几行代码,我就能得到我想要的~
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");
}
}
@KarlNicholas可能重复,它将返回所有img标记,我只需要使用“原始数据”获取img。@KarlNicholas可能重复,它将返回所有img标记,我只需要使用“原始数据”获取img。
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();
}
}