开发者社区 问答 正文

如何通过Android Studio制作一些图像爬行器

我想创建一个程序,当我键入关键字时,在其中搜索Google并抓取两张图片。我想知道如何从Google获取图像的标签,以及如何通过使用android studio进行编码以将图像保存到android。

我没有完全理解,因为我具有入门阶段的技能。我已经做了很多搜索,而且我知道Google的图片搜索URL是“ https://www.google.com/search?q=keyword&tbm=isch ”。

import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.method.ScrollingMovementMethod; import android.view.View; import android.widget.Button; import android.widget.TextView;

import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

private String htmlPageUrl = "https://www.google.com/search?q=keyword&tbm=isch"; //homepage
private TextView textviewHtmlDocument;
private String htmlContentInStringFormat="";

int cnt=0;

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


    textviewHtmlDocument = (TextView)findViewById(R.id.textView);
    textviewHtmlDocument.setMovementMethod(new ScrollingMovementMethod()); //scroll

    Button htmlTitleButton = (Button)findViewById(R.id.button);
    htmlTitleButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println( (cnt+1) +"번째 파싱");
            JsoupAsyncTask jsoupAsyncTask = new JsoupAsyncTask();
            jsoupAsyncTask.execute();
            cnt++;
        }
    });
}

private class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {

            Document doc = Jsoup.connect(htmlPageUrl).get();


            //test
            Elements titles= doc.select("div.news-con h1.tit-news");

            System.out.println("-------------------------------------------------------------");
            for(Element e: titles){
                System.out.println("title: " + e.text());
                htmlContentInStringFormat += e.text().trim() + "\n";
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        textviewHtmlDocument.setText(htmlContentInStringFormat);
    }
}

} 这不是我的代码,我正在学习其他人的代码来学习。我有一个问题,我不知道如何修改才能满足我的需求。

展开
收起
被纵养的懒猫 2019-10-08 17:17:39 467 分享 版权
阿里云 AI 助理回答

创建一个程序来搜索Google图片并抓取图片,包括其标签,然后将这些图片保存到Android设备上,涉及到几个步骤。由于直接从Google搜索结果中抓取图片可能违反Google的服务条款,我建议使用公开的API来获取合法的图片资源,比如使用“Custom Search JSON API”(需要API密钥且可能涉及费用)。但请注意,即使是通过API获取,也应遵循每个图片的版权规定。

获取图片标签

通常,图片的标签或元数据不会直接通过URL提供,而是嵌入在图片的HTML页面或者通过特定的API返回。如果你使用了合规的图片搜索API,它可能会提供图片描述、标签等信息。例如,使用Google的Custom Search JSON API时,返回的结果中可能包含与搜索关键词相关的描述信息,你可以将其作为图片的标签。

使用Android Studio保存图片

一旦你有了图片的URL,可以通过Android代码下载并保存图片到本地。以下是一个简单的示例,展示了如何在Android应用中下载并保存图片:

  1. 添加网络权限:在AndroidManifest.xml中添加INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />
  1. 下载并保存图片:在你的Activity或Fragment中,可以使用如下方法下载图片并保存到本地。
private void downloadAndSaveImage(String imageUrl, String destinationPath) {
    // 使用Picasso或其他库简化图片处理
    Picasso.get()
            .load(imageUrl)
            .into(new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    try {
                        File file = new File(destinationPath);
                        FileOutputStream fos = new FileOutputStream(file);
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                        fos.flush();
                        fos.close();
                        Log.d("IMAGE_DOWNLOAD", "Image saved successfully.");
                    } catch (IOException e) {
                        Log.e("IMAGE_DOWNLOAD", "Error saving image.", e);
                    }
                }

                @Override
                public void onBitmapFailed(Exception e, Drawable errorDrawable) {
                    Log.e("IMAGE_DOWNLOAD", "Error loading bitmap.", e);
                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {
                    // 可选的加载占位符处理
                }
            });
}

这个例子使用了Picasso库来简化图片的下载和显示过程。你需要在你的build.gradle文件中添加Picasso的依赖:

dependencies {
    implementation 'com.squareup.picasso:picasso:2.71828'
}

请记住,始终尊重版权,确保你有权使用所下载的图片,并且按照服务条款使用API。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答