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

365
06 января 2017, 08:31

Xочу сделать запрос в гугл по слову, получить первое изображение и скачать его получив byte[], как это сделать? На API у них ограничения.

Answer 1

Консольное приложения для получения изображений из google.com

Можете воспользоваться библиотекой, оболочкой над браузером, CefSharp. Подробно написание вспомогательного кода для неё расписал в этом ответе.

Вам только надо будет изменить класс Program для неё:

class Program
{
    private static void Main()
    {
        MainAsync().Wait();
    }
    private static async Task MainAsync()
    {
        CefSharpWrapper wrapper = new CefSharpWrapper();
        wrapper.InitializeBrowser();
        Console.Write("Введите поисковой запрос: ");
        string searchText = Console.ReadLine();
        string base64 = await wrapper.GetResultAfterPageLoad("https://images.google.com", async () =>
        {
            await wrapper.EvaluateJavascript(
// заполняем тесковое поле
$@"document.getElementById('lst-ib').value = '{searchText}';
// выполняем submit поисковой формы
document.getElementById('tsf').submit()");
            // Ждём когда перейдёт на результаты поиска
            wrapper.WaitTillAddressChanges();
            // Когда страница результатов полностью подгрузится, излекаем картинку
            return await wrapper.GetResultAfterPageLoad(wrapper.Address, async () =>
                await wrapper.EvaluateJavascript<string>(
                    // получаем результаты (атрибут src первой img)
                    "document.querySelector('.rg_di.rg_bx.rg_el.ivg-i img').src"));
        });
        // Так как картинки хранятся в Base64 удаляем заголовок
        base64 = Regex.Replace(base64, @"^data:image/\w+;base64,(.*)", "$1", RegexOptions.IgnoreCase);
        // Превращаем Base64 в массив байт
        byte[] imageBytes = Convert.FromBase64String(base64);
        wrapper.ShutdownBrowser();
    }
}
Answer 2

Можно воспользоваться библиотекой selenium- эта либа позволяет взаимодействовать с браузером.

Подаешь на вход ссылку, затем вбиваешь текст в поиск, переходишь на нужную ссылку, закачиваешь себе страницу, используя WebClient, через какой-нибудь AngleSharp парсишь эту страницу, получая ссылки, используя WebClient закачиваешь.

Может кто-нибудь предложит другой путь...

READ ALSO
Запрос к базе данных PostgreSQL на C#

Запрос к базе данных PostgreSQL на C#

ЗдравствуйтеПишу такой код:

481
RichTextBox как DataTemplate в ListView

RichTextBox как DataTemplate в ListView

Доброго времени суток! У меня в качестве ListViewItemTemplate является RichTextBox с забинденным Document'ом

374
Не правильная дозапись в бинарный файл C#

Не правильная дозапись в бинарный файл C#

Всем доброго времени сутокПомогите разобраться, написал приложение которое производит дозапись бинарного файла, но дозапись только в 101 значение,...

385
Делегаты C#. Invoke

Делегаты C#. Invoke

В качестве примера возьмем следующий код и опустим все подробности

430