Как получить изображение с первой страницы при поиске в Google?


, как правило, после использования Google для поиска для такого города, есть часть страницы Википедии справа с изображением и картой. Кто-нибудь может сказать мне, как я могу получить доступ к этому изображению? Я должен знать, как его скачать.

2 3

2 ответа:

На самом деле основное изображение (которое идет с изображением карты справа) очень редко из Википедии, поэтому вы не можете использовать 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();
                }
            }
        }
    }
}
Эта работа для меня, и всегда возвращает фактический основной образ (если таковой существует). Например, GetGoogleImage("New York") Дайте мне данные: image / jpeg; base64,/9j/4AAQSkZJRg....

Я использую тот факт, что из всех строковых изображений base64 в ответе main имеет максимальную высоту, поэтому его нужно только упорядочить их по высоте и выбрать последний. Если это необходимо, вы можете проверить здесь также минимальную высоту изображения. Замена \075 на = необходима подкладка base64.

Если вы хотите получить основное изображение статьи Википедии, вы должны использовать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 предоставляет API для возврата HTML-контента