Android 在谷歌搜索时,如何从第一页获取图像?

Android 在谷歌搜索时,如何从第一页获取图像?,android,image,google-search,wikipedia,Android,Image,Google Search,Wikipedia,通常在使用谷歌搜索一个城市后,右边的维基百科页面上会有一部分图像和地图。有人能告诉我如何访问此图像吗?我应该知道如何下载它。如果你想要维基百科文章的主图像,你必须使用 更新: 您可以使用jsoup:JavaHTML解析器org.jsoup:jsoup:1.8.3,它返回页面内的图像列表 String stringResponse = getHtmlContent(url); Document doc = Jsoup.parse(stringResponse); Eleme

通常在使用谷歌搜索一个城市后,右边的维基百科页面上会有一部分图像和地图。有人能告诉我如何访问此图像吗?我应该知道如何下载它。

如果你想要维基百科文章的主图像,你必须使用

更新:

您可以使用jsoup:JavaHTML解析器org.jsoup:jsoup:1.8.3,它返回页面内的图像列表

    String stringResponse = getHtmlContent(url);
    Document doc = Jsoup.parse(stringResponse);
    Element content = doc.getElementById("content");
    //Get all elements with img tag ,
    Elements img = content.getElementsByTag("img");
    for (Element el : img) {
        //for each element get the src image url
        String src = el.attr("src");
        Log.d(TAG, "src attribute is : " + src);
        String alt = el.attr("alt");
        //do some stuff
    }
更新:
Wikipida提供API以返回

实际上,右侧地图图像附带的主图像很少来自Wikipedia,因此您无法使用Wikipedia API获取它。如果要访问实际的主映像,可以使用以下选项:

private static void GetGoogleImage(string word)
{
    // make an HTTP Get request
    var request = (HttpWebRequest)WebRequest.Create("https://www.google.com.pg/search?q=" + word);
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36";
    using (var webResponse = (HttpWebResponse)request.GetResponse())
    {
        using (var reader = new StreamReader(webResponse.GetResponseStream()))
        {
            // get all images with base64 string
            var matches = Regex.Matches(reader.ReadToEnd(), @"'data:image/jpeg;base64,([^,']*)'");
            if (matches.Count > 0)
            {
                // get the image with the max height
                var bytes = matches.Cast<Match>()
                    .Select(x => Convert.FromBase64String(x.Groups[1].Value.Replace("\\75", "=").Replace("\\075", "=")))
                    .OrderBy(x => Image.FromStream(new MemoryStream(x, false)).Height).Last();

                // save the image as 'image.jpg'
                using (var imageFile = new FileStream("image.jpg", FileMode.Create))
                {
                    imageFile.Write(bytes, 0, bytes.Length);
                    imageFile.Flush();
                }
            }
        }
    }
}
这对我来说是可行的,并且总是返回实际的主映像(如果存在)。例如,GetGoogleImageNewYork给我的


我使用的事实是,从响应的所有base64字符串图像中,main具有最大高度,因此只需按高度排序并选择最后一个。如果需要,您也可以在此处查看最小图像高度。需要将\075替换为=。

问题是谷歌通常使用维基百科页面上更好的图像。我应该为谷歌还是维基百科这样做?如何知道它是哪个图像?我想他们都有不同的名字和网址addresses@LaurynasG我在wikipedia页面上使用了这个库,每次主文章pic作为第一项返回时,都不能确保可能是没有pic的文章。你必须查看图像标签可能是唯一的依赖属性。这与我需要的完全一样。但这有没有可能不是为Android设计的呢?它不认识很多人commands@LaurynasG这是C语言,我的想法是给出逻辑,然后你可以用每种编程语言编写它。对不起,我还是不懂Java。谢谢你的回答。遗憾的是,我没有足够的经验来操作语言和网络逻辑: