Як швидко зібрати дані з сайту за допомогою Scrapy

Привіт, мене звати Федір Лебідь, я співзасновник Webparsers.com та Senior Business Analyst в ElevEdge. Нижче я розповім, як можна розв’язувати прості задачі з парсингу сайтів навіть не технічним спеціалістам.

Вирішив написати про це, бо робота з даними — дуже важливий скіл, особливо для менеджерських ролей. І так чи інакше вміти самостійно щось зібрати буває дуже корисно й економить час.

Як це можна використовувати:

  • дослідження ринку та конкурентів (ціни, послуги, асортимент);
  • лідогенерація (списки компаній, посилання, імейли);
  • отримання даних, недоступних через API.

Плюс із розвитком LLM (Large Language Models) це може допомогти з отриманням класних інсайтів, адже дані можна віддавати для контексту ChatGPT. Тому поїхали!


Web scraping або парсинг залишається потужним інструментом для збору даних із сайтів. Думаю, багато хто стикався з кейсом, коли треба отримати дані з сайту, але немає API. Сьогодні розглянемо використання Scrapy для збору даних із сайтів за допомогою Python.

Що таке Scrapy та як його встановити

Scrapy — це фреймворк Python, розроблений спеціально для збору даних. Він надає структурований та ефективний спосіб створення «павуків» (spiders), які ходять по сайту і витягують потрібні дані.

Створюємо свого першого павука.

Налаштовуємо оточення та встановлюємо Scrapy

  • Встановіть віртуальне оточення, для цього можна використати conda.
  • Встановіть Scrapy за допомогою команди pip install scrapy.
  • Створіть проєкту Scrapy: scrapy startproject my_scraper.
  • Пeрейдіть до папки cd spiders та своріть новий спайдер myspider.py.

Перед тим як, власне, писати код, спробуймо пересвідчитись, що Scrapy може знайти елементи на сайті

  • Йдемо до термінала і вводимо команду scrapy shell — бачимо термінал Scrapy.
  • Потім вводимо команду fetch(’your-link-here’) і дивимось, чи отримали 200 на нашому респонcі.
  • Для перевірки знайдемо елемент на сторінці. Для цього пишемо таку команду: response.css(’h1.title::text’).get.

Щоб знайти потрібний вам селектор та клас, перейдіть у консоль розробника у вашому браузері.

Вставляємо наш код

import scrapy

class MySpider(scrapy.Spider):
    name = 'my_spider'
    start_urls = ['<https://example.com>']

    def follow_link(self, response):
        # Код для переходу на сторінку кліку на посилання
        for link in response.css('div.main_link a::attr(href)'):
            yield response.follow(link, callback=self.parse_item)
            
        for i in range (1, 25):
            # Цикл що відкриває наступну сторінку
            next_page = f'<https://example.com/page-{i}/>'
            yield response.follow(next_page, callback=self.follow_link)

    def parse_item(self, response):
        # Код для обробки сторінки та вилучення даних
        yield {
            'text': response.css('span.text::text').get(),
            'info': response.css('small.info::text').get(),
        }

Запускаємо павука scrapy crawl my_spider

Після запуску в ту саму папку створиться CSV-файл з вашими даними в директорії.

Переваги використання Scrapy

  • Ефективність. Дозволяє швидко отримати результат за відносно короткий час.
  • Простота. Scrapy використовує досить простий, інтуїтивно зрозумілий код з низьким порогом входу.
  • Вбудована підтримка експорту даних. Scrapy може експортувати дані у різні формати, як-то CSV, JSON тощо.

Висновки

Scrapy — це потужний і зручний інструмент для збору даних з сайтів. Для його використання вам знадобляться базові знання HTML, CSS та Python.

Важливе зауваження. Під час роботи зі Scrapy дотримуйтесь правил використання сайтів та уникайте надмірного навантаження на сервери. Для цього можете робити штучну затримку, щоб ненароком не покласти чийсь сервер.

Більше цікавого про парсинг, технології та бізнес в нашому Telegram-каналі.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось7
До обраногоВ обраному8
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Мені здається, що це трохи минулий вік, зараз простіше це робити через віртуальну машину, плюс сайту буде набагато складніше це відслідкувати, плюс ти майже не залежиш від дизайну.

питання в ціні, зокрема проксі

Ну... Ще є питання в ціні розробників... Бо якщо нам треба парсити багато, що стає питання в ціні, то це скоріше за усе багато різних сайтів (бо інакше просто можна сконтактувати), а це треба розібрати DOM, трохи більше роботи, ніж просто клікаємо на цей текст, клікаємо на цей, вводимо тут, натискаємо Enter, ...

Запускаємо, наприклад VirtualBox, зараз методів CV та AI достатньо для того, щоб розпізнати зображення на екрані, надіслати пересування миші та натискання клавіш, та отримати все що тобі треба напряму запускаючи будь-який браузер.

Цікаво б було прочитати шляхи обходу захисту за допомогою scrappy.

І що, от так напряму можна брати і збирати дані? Ніякий cloudflare не перешкода?

Сloudflare звісно перешкоджає як і Captcha. Від сайту дуже залежить і який поріг реквестів він блочить.

Висновки
Scrapy — це потужний і зручний інструмент для збору даних з сайтів. Для його використання вам знадобляться базові знання HTML, CSS та Python.

Реально як шкільний реферат виглядає.

Тема цікава, але рівень статі прям якийсь твір школяра.
Раз ваша вірма займається парсингом, то чому б не написати про проблеми, з котрими зіштовхнулись? Які були виклики, як боролись із парсингом складних сайтів

Буду радий прочитати одну з ваших статей по цій темі

Боже, сеньйор би посоромився такого рівня матеріал викладати. Більше для трейні підходить.

Дякую за статтю
Ви написали що скрапі

Scrapy може експортувати дані у різні формати, як-то CSV, JSON тощо.

, але не вказали як це робити. Можливо було варто про це сказати декілька слів, ну і ще не зовсім розкрито що отримується після цього

parse_item

(тобто можна було б і додати

scrapy crawl my_spider -o output.json

Дякую, дійсно має сенс це підсвітити

як можна розв’язувати прості задачі з парсингу сайтів навіть не технічним спеціалістам.

Для людини, яка не має девелоперського досвіду це абсолютно безкорисна справа.
Так само і дані отримані в результаті. Що і як і з ними робити в такому форматі незрозуміло.

Якби ж ти писав про сервіс, який дозволяє це робити з простим та інтуїтивним інтерфейсом — була б справді дуже корисна стаття

Привіт, я думаю що ви праві, але всим не вгодити. Оскільки стаття знаходиться в розділі tech то розрахована на людей з дев. досвідом.

Візьму до уваги запропоновану тему, бо такі тулзи є і деякі з них я використовую. Думаю підборку можна зробити.

Дякую

Тут малося мабуть те що рівень статі нижче підлоги. Типу критикувати будуть як ті хто мають якийсь досвід так і не дуже.

Підписатись на коментарі