CAPSOLVER
Блог
Веб-скрапинг на C#: Без блокировки

Веб-скрапинг на C#: Без блокировки

Logo of CapSolver

Nikolai Smirnov

Software Development Lead

11-Jun-2024

C# - это универсальный язык программирования, широко используемый в корпоративных проектах и приложениях. Благодаря своим корням в семействе языков C, он обладает эффективностью и мощностью, что делает его бесценным дополнением к инструментарию любого разработчика.

Благодаря широкому использованию, C# предлагает множество инструментов, которые позволяют разработчикам решать сложные задачи, и веб-скрапинг не является исключением.

В этом руководстве мы проведем вас через создание простого веб-скрапера с использованием C# и его удобных библиотек для скрапинга. Кроме того, мы раскроем хитрый трюк, который поможет вам избежать блокировки всего с одной строкой кода. Готовы? Поехали!

Оглавление

  1. Введение в веб-скрапинг
    • Почему выбрать C# вместо C для веб-скрапинга?
  2. Настройка окружения
    • Предварительные требования
    • Установка библиотек
    • Создание проекта веб-скрапинга на C# в Visual Studio
  3. Основы веб-скрапинга с использованием C#
    • Выполнение HTTP-запросов
    • Разбор HTML-контента
    • Продвинутый разбор HTML
  4. Как обрабатывать собранные данные
  5. Обработка CAPTCHA при веб-скрапинге
    • Интеграция решений для CAPTCHA
    • Пример кода для CapSolver
  6. Заключение

1. Введение в веб-скрапинг

Веб-скрапинг - это процесс автоматического извлечения информации с веб-сайтов. Это может быть сделано для различных целей, включая анализ данных, исследование рынка и конкурентную разведку. Однако многие веб-сайты внедряют механизмы для обнаружения и блокировки автоматических попыток скрапинга, поэтому важно использовать сложные техники, чтобы избежать блокировки.

Почему выбрать C# вместо C для веб-скрапинга?

Веб-скрапинг часто включает взаимодействие с веб-элементами, управление HTTP-запросами и обработку извлечения и разбора данных. Хотя C - это мощный и эффективный язык, он не имеет встроенных библиотек и современных функций, которые делают веб-скрапинг проще и эффективнее. Вот несколько причин, почему C# лучше подходит для веб-скрапинга:

  • Богатые библиотеки: C# имеет обширные библиотеки, такие как HtmlAgilityPack для разбора HTML и Selenium для автоматизации браузера, что упрощает процесс скрапинга.
  • Асинхронное программирование: ключевые слова async и await в C# позволяют эффективно выполнять асинхронные операции, что необходимо для одновременной обработки множества веб-запросов.
  • Простота использования: синтаксис C# более современный и удобный по сравнению с C, что делает процесс разработки быстрее и менее подверженным ошибкам.
  • Интеграция: C# бесшовно интегрируется с .NET Framework, предоставляя мощные инструменты и сервисы для создания надежных приложений.

Страдаете от повторяющихся неудач в решении раздражающих CAPTCHA?

Откройте для себя бесшовное автоматическое решение CAPTCHA с помощью технологии Capsolver, основанной на ИИ!

Получите свой Бонусный код для лучших решений CAPTCHA; CapSolver: WEBS. После активации вы получите дополнительный бонус в 5% после каждой пополнения, без ограничений.

2. Настройка окружения

Прежде чем начать скрапинг, нам нужно настроить наше окружение для разработки. Вот как это сделать:

Предварительные требования

  • Visual Studio: бесплатная версия Community Visual Studio 2022 подойдет.
  • .NET 6+: любая версия LTS, начиная с 6, подойдет.
  • Библиотека HtmlAgilityPack для разбора HTML
  • Библиотека RestSharp для выполнения HTTP-запросов

Создание проекта веб-скрапинга на C# в Visual Studio

Настройка проекта в Visual Studio

  1. Откройте Visual Studio и нажмите на опцию "Создать новый проект".
  1. В окне "Создать новый проект" выберите опцию "C#" из выпадающего списка. После указания языка программирования выберите шаблон "Консольное приложение" и нажмите "Далее".
  1. Назовите свой проект StaticWebScraping, нажмите "Выбрать" и выберите версию .NET. Если у вас установлена .NET 6.0, Visual Studio должна автоматически выбрать её для вас.
  1. Нажмите кнопку "Создать", чтобы инициализировать ваш проект веб-скрапинга на C#. Visual Studio инициализирует папку StaticWebScraping, содержащую файл App.cs. Этот файл будет хранить вашу логику веб-скрапинга на C#:
namespace WebScraping {
    public class Program {
        public static void Main() {
            // Логика скрапинга...
        }
    }
}

Теперь пришло время понять, как создать веб-скрапер на C#!

3. Основы веб-скрапинга с использованием C#

В этом разделе мы создадим приложение на C#, которое выполняет HTTP-запросы к веб-сайту, получает HTML-контент и разбирает его для извлечения информации.

Выполнение HTTP-запросов

Сначала создадим базовое приложение на C#, которое выполняет HTTP-запросы к веб-сайту и получает HTML-контент.

using System;
using RestSharp;

class Program
{
    static void Main()
    {
        // Создаем новый экземпляр RestClient с целевым URL
        var client = new RestClient("https://www.example.com");
        
        // Создаем новый экземпляр RestRequest с методом GET
        var request = new RestRequest(Method.GET);
        
        // Выполняем запрос и получаем ответ
        IRestResponse response = client.Execute(request);

        // Проверяем, успешен ли запрос
        if (response.IsSuccessful)
        {
            // Печатаем HTML-контент ответа
            Console.WriteLine(response.Content);
        }
        else
        {
            Console.WriteLine("Не удалось получить контент");
        }
    }
}

Разбор HTML-контента

Далее мы будем использовать HtmlAgilityPack для разбора HTML-контента и извлечения необходимой информации.

using HtmlAgilityPack;
using System;
using RestSharp;

class Program
{
    static void Main()
    {
        // Создаем новый экземпляр RestClient с целевым URL
        var client = new RestClient("https://www.example.com");
        
        // Создаем новый экземпляр RestRequest с методом GET
        var request = new RestRequest(Method.GET);
        
        // Выполняем запрос и получаем ответ
        IRestResponse response = client.Execute(request);

        // Проверяем, успешен ли запрос
        if (response.IsSuccessful)
        {
            // Загружаем HTML-контент в HtmlDocument
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response.Content);

            // Выбираем узлы, соответствующие указанному XPath-запросу
            var nodes = htmlDoc.DocumentNode.SelectNodes("//h1");
            
            // Перебираем выбранные узлы и печатаем их внутренний текст
            foreach (var node in nodes)
            {
                Console.WriteLine(node.InnerText);
            }
        }
        else
        {
            Console.WriteLine("Не удалось получить контент");
        }
    }
}

Продвинутый разбор HTML

Давайте продвинемся дальше и извлечем более сложные данные с примерного сайта. Предположим, мы хотим извлечь список статей с заголовками и ссылками с блога.

using HtmlAgilityPack;
using System;
using RestSharp
using HtmlAgilityPack;
using System;
using RestSharp;

class Program
{
    static void Main()
    {
        // Создаем новый экземпляр RestClient с целевым URL
        var client = new RestClient("https://www.example.com/blog");
        
        // Создаем новый экземпляр RestRequest с методом GET
        var request = new RestRequest(Method.GET);
        
        // Выполняем запрос и получаем ответ
        IRestResponse response = client.Execute(request);

        // Проверяем, успешен ли запрос
        if (response.IsSuccessful)
        {
            // Загружаем HTML-контент в HtmlDocument
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response.Content);

            // Выбираем узлы, соответствующие указанному XPath-запросу
            var nodes = htmlDoc.DocumentNode.SelectNodes("//div[@class='post']");

            // Перебираем выбранные узлы и извлекаем заголовки и ссылки
            foreach (var node in nodes)
            {
                var titleNode = node.SelectSingleNode(".//h2/a");
                var title = titleNode.InnerText;
                var link = titleNode.Attributes["href"].Value;
                
                Console.WriteLine("Заголовок: " + title);
                Console.WriteLine("Ссылка: " + link);
                Console.WriteLine();
            }
        }
        else
        {
            Console.WriteLine("Не удалось получить контент");
        }
    }
}

В этом примере мы извлекаем данные с блога, выбирая заголовки и ссылки каждой статьи. XPath-запрос //div[@class='post'] используется для нахождения отдельных постов.

4. Как обрабатывать собранные данные

  1. Сохраняйте их в базе данных для легкого доступа к ним в любое время.
  2. Преобразуйте их в формат JSON и используйте для вызова различных API.
  3. Преобразуйте их в читаемые человеком форматы, такие как CSV, который можно открыть в Excel.

Это лишь несколько примеров. Ключевой момент заключается в том, что как только вы получили собранные данные в вашем коде, вы можете использовать их по своему усмотрению. Обычно собранные данные преобразуются в более полезный формат для маркетинговых, аналитических или коммерческих команд.

Однако, помните, что веб-скрапинг имеет свои собственные вызовы.

5. Обработка CAPTCHA при веб-скрапинге

Одним из самых больших вызовов при веб-скрапинге является обработка CAPTCHA, которые предназначены для различения человеческих пользователей и ботов. Если вы столкнетесь с CAPTCHA, вашему скрипту для скрапинга нужно будет решить её, чтобы продолжить. Особенно если вы хотите масштабировать ваш веб-скрапинг, CapSolver поможет вам благодаря своей высокой точности и быстрой обработке любых CAPTCHA, с которыми вы можете столкнуться.

Интеграция решений для CAPTCHA

Существует несколько сервисов для решения CAPTCHA, которые можно интегрировать в ваш скрипт для скрапинга. Здесь мы будем использовать сервис CapSolver. Сначала вам нужно зарегистрироваться на CapSolver и получить ваш API-ключ.

Шаг 1: Регистрация на CapSolver

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

Шаг 2: Получение вашего API-ключа

После регистрации вы можете получить ваш API-ключ на главной панели.

Пример кода для CapSolver

Использование CapSolver в вашем проекте веб-скрапинга или автоматизации очень просто. Вот пример на Python, демонстрирующий, как вы можете интегрировать CapSolver в ваш рабочий процесс:

# pip install requests
import requests
import time

# TODO: настройте ваш конфиг
api_key = "YOUR_API_KEY"  # ваш API-ключ CapSolver
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # ключ сайта вашей целевой страницы
site_url = ""  # URL страницы вашей целевой страницы

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Не удалось создать задачу:", res.text)
        return
    print(f"Получен taskId: {task_id} / Ожидание результата...")

    while True:
        time.sleep(3)  # задержка
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("Не удалось решить! Ответ:", res.text)
            return

token = capsolver()
print(token)

В этом примере функция capsolver отправляет запрос к API CapSolver с необходимыми параметрами и возвращает решение CAPTCHA. Эта простая интеграция может сэкономить вам бесчисленные часы и усилия при ручном решении CAPTCHA во время веб-скрапинга и автоматизации задач.

6. Заключение

Веб-скрапинг с использованием C# позволяет разработчикам автоматизировать извлечение данных с веб-сайтов эффективно. Используя библиотеки, такие как HtmlAgilityPack и RestSharp, а также сервисы для решения CAPTCHA, такие как CapSolver, разработчики могут легко навигировать по веб-страницам, разбирать HTML-контент и справляться с различными вызовами. Эта возможность не только упрощает процесс сбора данных, но и обеспечивает соблюдение этических практик скрапинга, повышая надежность и масштабируемость проектов веб-скрапинга в различных приложениях.

Дисклеймер о соблюдении: Информация, представленная в этом блоге, предназначена только для справочных целей. CapSolver обязуется соблюдать все применимые законы и нормы. Использование сети CapSolver для незаконной, мошеннической или злоупотребляющей деятельности строго запрещено и будет расследовано. Наши решения для распознавания капчи улучшают пользовательский опыт, обеспечивая 100% соблюдение при помощи в решении трудностей с капчей в процессе сбора общедоступных данных. Мы призываем к ответственному использованию наших услуг. Для получения дополнительной информации, пожалуйста, посетите наши Условия обслуживания и Политику конфиденциальности.

Ещеe

Как обойти CAPTCHA с помощью Selenium и Node.js при парсинге
Как решить CAPTCHA с помощью Selenium и Node.js при веб-скрейпинге

Если вы сталкиваетесь с постоянными проблемами с CAPTCHA при веб-скрапинге, рассмотрите использование инструментов с их передовыми технологиями, чтобы обеспечить надежное решение.

The other captcha
Logo of CapSolver

Nikolai Smirnov

16-Oct-2024

Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга
Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга

Откройте для себя сильные стороны и различия между Scrapy и Selenium для веб-скреппинга. Узнайте, какой инструмент лучше всего подходит для вашего проекта и как справиться с такими проблемами, как CAPTCHA.

The other captcha
Logo of CapSolver

Nikolai Smirnov

25-Jul-2024

API против парсинга
API против парсинга: лучший способ получения данных

Разберитесь в различиях, плюсах и минусах веб-скрапинга и API-скрапинга, чтобы выбрать лучший метод сбора данных. Изучите CapSolver для решения задач, связанных с ботами.

The other captcha
Logo of CapSolver

Nikolai Smirnov

16-Jul-2024

Использование Selenium и C# для автоматизации вызовов CAPTCHA
Использование Selenium и C# для автоматизации вызовов CAPTCHA

В конце этого урока вы будете иметь полное представление о том, как решить CAPTCHA с помощью Selenium C#.

The other captcha
Logo of CapSolver

Nikolai Smirnov

11-Jul-2024

Что такое Puppeteer
Что такое Puppeteer и как его использовать для веб-скрапинга | Полное руководство 2024

Это полное руководство расскажет о том, что такое Puppeteer и как эффективно использовать его для веб-скрапинга

The other captcha
Logo of CapSolver

Nikolai Smirnov

10-Jul-2024

Что такое веб-скрейпинг
Что такое веб-скрейпинг | Распространенные случаи использования и проблемы

Познакомьтесь с веб-скреппингом: узнайте о его преимуществах, легко справляйтесь с проблемами и развивайте свой бизнес с помощью CapSolver.

The other captcha
Logo of CapSolver

Nikolai Smirnov

05-Jul-2024