GScraper - Бібліотека для пошуку зображень в інтернеті
Що таке GScraper?
GScraper - призначення та використання.
GScraper - це бібліотека для мови програмування C#, призначена для зручного отримання даних з різних пошукових систем, таких як Google, DuckDuckGo, Brave та інші. Мета цієї бібліотеки - надати програмістам зручний інтерфейс для виконання пошукових запитів і отримання результатів у вигляді структурованої інформації.
Основна ідея GScraper - абстрагувати складність взаємодії з різними пошуковими системами та надати єдиний інтерфейс для отримання результатів пошуку. Замість того, щоб кожен розробник самостійно вивчав документацію і взаємодіяв з API кожної конкретної системи, він може використовувати GScraper для здійснення пошукових операцій.
Кожен 'Scraper' у бібліотеці (наприклад, GoogleScraper, DuckDuckGoScraper, BraveScraper) відповідає за взаємодію з конкретною пошуковою системою і використовується для виконання запитів і отримання результатів відповідно до специфікацій цієї системи.
Як використовувати GScraper?
Офіційний приклад з репозиторію:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using GScraper;
using GScraper.Google;
namespace GScraperExample
{
internal static class Program
{
private static async Task Main()
{
Console.WriteLine("GScraper Example Program"); // Виведення тексту в консоль про програму прикладу GScraper.
using var scraper = new GoogleScraper(); // Створення об'єкту scraper типу GoogleScraper через using, який автоматично диспоузиться після виходу з області видимості.
while (true) // Безкінечний цикл для отримання запитів користувача.
{
Console.Write("Query (enter 'e' to exit): "); // Виведення тексту запиту в консоль.
string? text = Console.ReadLine(); // Отримання введення користувача з консолі.
if (string.IsNullOrEmpty(text)) // Перевірка на пустий ввід.
continue; // Продовження циклу, якщо ввід порожній.
if (text == "e") // Перевірка на вихід з програми.
break; // Вихід з циклу, якщо введено 'e'.
IEnumerable<IImageResult> images; // Оголошення змінної для збереження списку зображень.
try // Початок блоку спроби.
{
images = await scraper.GetImagesAsync(text); // Отримання списку зображень за допомогою методу GetImagesAsync об'єкту scraper.
}
catch (Exception e) when (e is HttpRequestException or GScraperException) // Обробка винятків, що можуть виникнути під час виконання запиту.
{
Console.WriteLine(e); // Виведення інформації про виняток у консоль.
continue; // Продовження циклу при виникненні винятку.
}
bool enumerateAll = false; // Ініціалізація змінної для переліку всіх зображень.
bool stop = false; // Ініціалізація змінної для припинення переліку зображень.
foreach (var image in images) // Цикл перебору зображень зі списку.
{
Console.WriteLine(); // Порожній вивід у консоль для відділення зображень.
Console.WriteLine(JsonSerializer.Serialize(image, image.GetType(), new JsonSerializerOptions { WriteIndented = true })); // Виведення в консоль інформації про зображення у форматі JSON.
if (!enumerateAll) // Перевірка на перелік всіх зображень.
{
Console.Write("Press 'n' to send the next image, 'a' to enumerate all images and 's' to stop: "); // Виведення тексту запиту на подальші дії користувача.
var key = Console.ReadKey().Key; // Отримання введеного користувачем символу.
Console.WriteLine(); // Перехід на новий рядок у консолі.
switch (key) // Перевірка введеного символу користувача.
{
case ConsoleKey.A: // В разі введення 'a'.
enumerateAll = true; // Позначення переліку всіх зображень.
break;
case ConsoleKey.S: // В разі введення 's'.
stop = true; // Позначення припинення переліку зображень.
break;
default: // У всіх інших випадках.
break;
}
}
if (stop) // Перевірка на потребу в припиненні переліку.
{
break; // Вихід з циклу при необхідності припинення переліку зображень.
}
}
}
}
}
}Цей код представляє програму, яка використовує бібліотеку GScraper для отримання зображень з Інтернету. Вона починає з виведення тексту про програму у консоль. Потім запускається нескінченний цикл, де користувач може вводити запити. Користувач може ввести 'e' для виходу з програми. Програма намагається отримати список зображень за допомогою обраного типу скрапера. Якщо виникає помилка під час отримання зображень, вона виводиться у консоль, і програма продовжує роботу. Потім програма перебирає список отриманих зображень, виводить їх інформацію у форматі JSON у консоль і чекає на введення користувача для подальших дій з кожним зображенням. Користувач може натискати 'n' для переходу до наступного зображення, 'a' для переліку всіх зображень або 's' для припинення перегляду. Програма завершу
Весь код на GoogleDrive:Посилання
Як використовувати GScraper(або любий інший проєкт) у своїй програмі?
Підключення зовнішніх проєктів.
Зв'язок зовнішніх проєктів (.csproj та .sln) з іншим проєктом можна встановити за допомогою інструментів командного рядка (dotnet add) та редагування відповідних файлів.
Команда dotnet add використовується для додавання посилань на зовнішні проєкти до поточного проєкту. Наприклад:
dotnet add reference шлях_до_зовнішнього_проєкту.csprojКрім цього, можна редагувати файли проєкту вручну:
- Для .csproj: Відкрийте файл поточного проєкту (.csproj) у текстовому редакторі та вручну додайте посилання на зовнішній проєкт.
- Для .sln: Відкрийте файл рішення (.sln) у текстовому редакторі та додайте посилання на зовнішній проєкт.
У файлі .csproj можна додати наступний рядок:
<ItemGroup>
<ProjectReference Include="шлях_до_зовнішнього_проєкту.csproj" />
</ItemGroup>У файлі .sln можна додати запис наступного вигляду:
Project("{зовнішній_GUID}") = "Назва_проєкту", "шлях_до_зовнішнього_проєкту.csproj", "{унікальний_GUID}"
EndProjectЦе дозволить підключити зовнішній проєкт до вашого поточного проєкту, щоб ви могли використовувати його функціонал та ресурси у вашому програмному забезпеченні.
Приклад використання GScraper з додатковою бібліотекою для роботи з ним
GScraper - призначення та використання.
Пояснення роботи класів:
ScrapConfigтаScrapImageConfig:ScrapConfigвизначає конфігурацію для скрапінгу і містить список об'єктівScrapImageConfig.ScrapImageConfigмістить налаштування для пошуку конкретного типу зображень, такі як назва, кількість зображень для завантаження та формат імені файлу.
ScrapHendler:ScrapHendlerпризначений для використанняGoogleScraperта інших функцій для скрапінгу та завантаження зображень за заданою конфігурацією.- Метод
ScrapByScapConfigцього класу приймає конфігурацію та вивідний каталог, створює папку виведення, і потім циклом скрапить та завантажить зображення для кожної конфігурації зі списку. SearchForImageвикористовуєGoogleScraperдля пошуку зображень за заданим текстом, вибирає доmaxReturnCountзображень та повертає їх URL.DownloadFileByURLзавантажує файл за заданим URL, використовуючиHttpClient, та зберігає його за вказаним шляхом та ім'ям файлу.
Як використовувати ці класи:
- Створіть об'єкт
ScrapConfigта додайте до нього об'єктиScrapImageConfigз необхідними налаштуваннями. - Ініціалізуйте
GoogleScraperта створіть об'єктScrapHendler, передаючи йомуGoogleScraper. - Викличте метод
ScrapByScapConfig, передаючи йому створенийScrapConfigта шлях для виведення.
Приклад використання:
class Program
{
static void Main(string[] args)
{
// Створення та конфігурація для скрапінгу
ScrapConfig scrapConfig = new ScrapConfig();
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("desert wallpaper", 5));
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("Strv 103B", 3));
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("Amx Elc Bis", 3));
// Ініціалізація скрапера та обробника скрапінгу
GoogleScraper scraper = new GoogleScraper();
ScrapHendler scrapHendler = new ScrapHendler(scraper);
// Виклик методу для скрапінгу за заданою конфігурацією та шляхом виводу
scrapHendler.ScrapByScapConfig(scrapConfig, "output_folder");
}
}Код з прикладу
Код з прикладу, посилання та сам код.
Весь код на GoogleDrive:Посилання
Program.cs:
using System;
using GScraper.Google;
namespace ScrapImagesFromJsonConfig
{
class Program
{
static void Main(string[] args)
{
// Конфігурація для скрапінгу
ScrapConfig scrapConfig = new ScrapConfig();
// Додання конфігурацій пошуку зображень
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("desert wallpaper", 5));
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("Strv 103B", 3));
scrapConfig.scrapImageConfigs.Add(new ScrapImageConfig("Amx Elc Bis", 3));
// Ініціалізація скрапера та обробника скрапінгу
GoogleScraper scraper = new GoogleScraper();
ScrapHendler scrapHendler = new ScrapHendler(scraper);
// Виклик методу для скрапінгу за заданою конфігурацією та шляхом виводу
scrapHendler.ScrapByScapConfig(scrapConfig, "output_folder");
}
}
}ScrapConfig.cs:
using System;
public class ScrapConfig
{
// Список конфігурацій пошуку зображень
public List<ScrapImageConfig> scrapImageConfigs { get; set; } = new List<ScrapImageConfig>();
}
public class ScrapImageConfig
{
// Назва для пошуку
public string SearchName { get; set; } = "";
// Кількість зображень для завантаження
public int CountToDownload { get; set; } = 1;
// Формат імені файлу
public string FileNameFormat { get; set; } = "<SearchName>-<Id>-<Time>.png";
public ScrapImageConfig(string searchName, int countToDownload)
{
SearchName = searchName;
CountToDownload = countToDownload;
}
// Отримання назви файлу за ідентифікатором
public string GetFileName(int id)
{
string result;
result = FileNameFormat;
result = result.Replace("<SearchName>", SearchName);
result = result.Replace("<Id>", Convert.ToString(id));
result = result.Replace("<Time>", DateTime.Now.ToString("HH-mm-ss-fff"));
return result;
}
}ScrapHendler.cs:
using GScraper.Google;
using System.Net;
public class ScrapHendler
{
private GoogleScraper Scraper { get; set; }
public void ScrapByScapConfig(ScrapConfig scrapConfig, string outputPath)
{
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
// Цикл по конфігураціям для скрапінгу зображень
for (int i = 0; i < scrapConfig.scrapImageConfigs.Count; i++)
{
// Пошук зображень та їх завантаження
string[] result = SearchForImage(Scraper, scrapConfig.scrapImageConfigs[i].SearchName, scrapConfig.scrapImageConfigs[i].CountToDownload);
for (int j = 0; j < result.Length; j++)
{
DownloadFileByURL(result[j], Path.Combine(outputPath, scrapConfig.scrapImageConfigs[i].GetFileName(j)));
}
}
}
// Пошук зображень за текстом
private string[] SearchForImage(GoogleScraper scraper, string searchText, int maxReturnCount)
{
try
{
var images = scraper.GetImagesAsync(searchText).Result; // Блокування та очікування результату
// Вибір до 'maxReturnCount' зображень
var selectedImages = images.Take(maxReturnCount).Select(image => image.Url).ToArray();
return selectedImages;
}
catch (AggregateException ae)
{
// Обробка виключень
foreach (var innerException in ae.InnerExceptions)
{
Console.WriteLine(innerException);
}
return new string[0];
}
}
// Завантаження файлу за URL
private static void DownloadFileByURL(string url, string pathAndFileName)
{
using (HttpClient httpClient = new HttpClient())
{
try
{
var response = httpClient.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
byte[] imageBytes = response.Content.ReadAsByteArrayAsync().Result;
Directory.CreateDirectory(Path.GetDirectoryName(pathAndFileName));
File.WriteAllBytes(pathAndFileName, imageBytes);
Console.WriteLine($"Файл завантажено та збережено у: {pathAndFileName}");
}
else
{
Console.WriteLine($"Не вдалося завантажити файл. Код статусу: {response.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Виникла помилка: {ex.Message}");
}
}
}
public ScrapHendler(GoogleScraper scraper)
{
Scraper = scraper;
}
}build info
- compiler
- 2.0.5.1 · 4054EF9BF6C4510A
- built
- 2026-11-08 14:31:25 UTC
WebUniverse