如何在Google中搜索时从第一页获取图片?

时间:2015-12-28 22:49:11

标签: android image google-search wikipedia

通常在使用Google搜索城市后,右侧会有维基百科页面的一部分,其中包含图片和地图。任何人都可以告诉我如何访问此图像?我应该知道如何下载它。

2 个答案:

答案 0 :(得分:3)

实际上,主要图像(右侧的地图图像)很少来自维基百科,因此您无法使用维基百科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();
                }
            }
        }
    }
}

这项工作对我来说,并且总是返回实际的主图像(如果存在的话)。例如,GetGoogleImage("New York")会给我data:image/jpeg;base64,/9j/4AAQSkZJRg...

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

答案 1 :(得分:-1)

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

<强>更新

  • 您可以使用jsoup:Java HTML Parser 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提供返回HTML Content

的API