CoderCastrov logo
CoderCastrov
Наука о данных

Запуск кода Scrapy из Jupyter Notebook без проблем

Запуск кода Scrapy из Jupyter Notebook без проблем
просмотров
2 мин чтение
#Наука о данных
Table Of Content

    Scrapy - это фреймворк с открытым исходным кодом для извлечения данных с веб-сайтов. Он быстрый, простой и расширяемый. Каждому специалисту по обработке данных следует быть знакомым с этим инструментом, так как им часто приходится собирать данные таким образом. Специалисты по обработке данных обычно предпочитают использовать ноутбуки для управления своим рабочим процессом. Jupyter Notebook очень популярен среди таких специалистов, наряду с другими вариантами, такими как PyCharm, zeppelin, VS Code, nteract, Google Colab и spyder, чтобы назвать несколько.

    Скрапинг с использованием Scrapy обычно выполняется с помощью файла .py. Его также можно инициализировать из ноутбука. Проблема заключается в том, что при повторном запуске блока кода возникает ошибка ReactorNotRestartable.

    Существует способ обойти эту ошибку, используя пакет [crochet](https://pypi.org/project/crochet/). С помощью этого пакета можно избежать ошибки ReactorNotRestartable. В этом блоге я покажу шаги, которые я предпринял, чтобы запустить код scrapy из Jupyter Notebook без ошибок.

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

    scrapy: pip install scrapy crochet: pip install crochet Любой ноутбук для Python, я использую Jupyter Notebook: pip install notebook


    Пример проекта:

    Для демонстрации шагов я буду парсить wikiquote для цитат Мейнарда Джеймса Кинана, американского рок-певца, и сохранять информацию в файл .csv, который будет перезаписываться каждый раз при запуске скрипта, что полезно для начала проекта с чистого листа. Это достигается с помощью настройки и передачи вложенного словаря с ключом FEEDS и словарем с именем выходного файла в качестве ключа и значениями, содержащими различные настройки для потока данных.

    Для инициализации процесса я запускаю следующий код:

    �� process = CrawlerProcess() process.crawl(QuotesToCsv) process.start() ��

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

    Ошибка `ReactorNotRestartable`, изображение автора.

    Чтобы запустить код снова без проблем, необходимо перезапустить ядро. Теперь с помощью crochet этот код можно использовать в Jupyter Notebook без проблем.

    Теперь я вызываю эту функцию для запуска кода без проблем.

    �� run_spider() ��

    Теперь давайте рассмотрим различия между этими двумя подходами:

    Вуаля! Больше нет ошибки. Скрипт выполняется и сохраняет вывод в файл quotes.csv.


    То же самое можно сделать из .py из Jupyter Notebook, используя run_spider()�������, если файл содержит скрипт. При этом удобно разрабатывать код из ноутбука. Также стоит отметить, что при использовании CrawlerRunner вместо CrawlerProcess в журнале будет гораздо меньше записей.


    Вот репозиторий GitHub со всеми кодами и ноутбуками, которые я использовал для тестирования своего рабочего процесса.

    До следующего раза!!!