Java 使用jsoup获取图像的url

Java 使用jsoup获取图像的url,java,android,jsoup,Java,Android,Jsoup,我正在使用谷歌图像搜索来查找图像,并使用JSOUP库获取android应用程序中第一张图像的URL 我的问题是,无论我怎么尝试,它都会显示URL为空 看起来包含第一个图像的元素没有url 以下是XML文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://

我正在使用谷歌图像搜索来查找图像,并使用JSOUP库获取android应用程序中第一张图像的URL 我的问题是,无论我怎么尝试,它都会显示URL为空 看起来包含第一个图像的元素没有url

以下是XML文件:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="arb.myapplication.MainActivity">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:srcCompat="@mipmap/ic_launcher"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="131dp"
    android:id="@+id/imageView" />

<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginRight="39dp"
    android:layout_marginEnd="39dp"
    android:layout_marginTop="11dp"
    android:id="@+id/button3"
    android:elevation="0dp" />

忽略图像视图 我使用按钮获取图像的url 这是JAVA文件

package arb.myapplication;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;


public class MainActivity extends AppCompatActivity {

class DownloadIcon extends AsyncTask<Object, Object, Integer>
{

    @Override
    protected Integer doInBackground(Object... objects) {
        Connection connecion= Jsoup.connect("http://www.google.com/search?tbm=isch&q=facebook+logo");
        try {
            Document document=connecion.get();
            Elements element=document.select("img.rg_ic.rg_i");

            String url=element.first().absUrl("src");
            publishProgress(url);

        } catch (IOException e1) {
            publishProgress(-1);
        }
        return 0;
    }

    @Override
    protected void onProgressUpdate(Object... values) {
       /* ImageView imageView=(ImageView) findViewById(R.id.imageView);
        try {
            InputStream inputStream= new URL(values[0].toString()).openStream();
            imageView.setImageBitmap(BitmapFactory.decodeStream(inputStream));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }*/
        Toast.makeText(getBaseContext(),values[0].toString(),Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        Toast.makeText(getBaseContext(),"done",Toast.LENGTH_SHORT).show();
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button3=(Button) findViewById(R.id.button3);
    button3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new DownloadIcon().execute();

        }
    });
}
包arb.myapplication;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.drawable.BitmapDrawable;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.Toast;
导入org.jsoup.Connection;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Attribute;
导入org.jsoup.nodes.Attributes;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.URL;
公共类MainActivity扩展了AppCompatActivity{
类下载图标扩展异步任务
{
@凌驾
受保护的整数doInBackground(对象…对象){
Connection connecion=Jsoup.connect(“http://www.google.com/search?tbm=isch&q=facebook+标志);
试一试{
Document Document=connecion.get();
Elements=document.select(“img.rg_ic.rg_i”);
字符串url=element.first().absUrl(“src”);
出版进度(url);
}捕获(IOE1异常){
出版进度(-1);
}
返回0;
}
@凌驾
受保护的void onProgressUpdate(对象…值){
/*ImageView ImageView=(ImageView)findViewById(R.id.ImageView);
试一试{
InputStream InputStream=新URL(值[0].toString()).openStream();
setImageBitmap(BitmapFactory.decodeStream(inputStream));
}捕获(IOE异常){
抛出新的运行时异常(e);
}*/
Toast.makeText(getBaseContext(),值[0].toString(),Toast.LENGTH_LONG.show();
}
@凌驾
受保护的void onPostExecute(整数){
Toast.makeText(getBaseContext(),“done”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button3=(Button)findViewById(R.id.button3);
button3.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
新建下载图标().execute();
}
});
}
}

onProgressUpdate
中,函数不显示Toast,因为其文本为空

我已经尝试获取所选元素的属性键和值
它与我使用Chrome浏览器解析元素时显示的内容相匹配,但没有
src
属性

文本为空,因为没有图像。如果您调试您的请求,您将看到403状态代码,它告诉您Jsoup客户端无权从Google获取图像。您需要使用或模拟浏览器来实现您的目标。

那么我应该做些什么来解决它呢?我可以使用什么来代替JSOUP@Eugene@AhmadRajab我不知道Android的具体例子,但你肯定应该先看看Selenium WebDriver和无头浏览。我改为使用bing图像搜索而不是google图像搜索,它可以工作。问题是google不允许自动搜索,而bing不重新调整它。非常感谢@Eugene