CoderCastrov logo
CoderCastrov
Парсер

О веб-скрапинге и добыче данных с использованием Scrapy...

О веб-скрапинге и добыче данных с использованием Scrapy...
просмотров
10 мин чтение
#Парсер


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

В этой статье я расскажу вам больше о веб-скрапинге и необходимых для этой работы языках программирования и инструментах. На протяжении статьи я буду использовать скриншоты из моего собственного проекта "YÖK Atlas Veri Madenciliği ve Web Kazıma". Однако, если вам интересен проект или вы хотите углубиться в него, вы можете получить больше информации о проекте, перейдя по ссылке ниже.


Нажмите здесь, чтобы посмотреть видео о презентации проекта

Приятного чтения! :)


Что такое веб-парсинг и добыча данных? В чем их различия?


Прежде всего, давайте начнем с объяснения этих двух основных понятий:

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

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

Теперь перейдем к различиям между ними:

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

Поэтому различать эти два понятия и хорошо знать их различия является крайне важным для относительно новой и быстро растущей отрасли, называемой Data Science.


Парсинг веб-сайтов

Перейдем к теме, о которой мы будем говорить в этой статье - парсинг веб-сайтов.



Вы когда-нибудь задумывались о количестве данных на сайтах, которые вы посещаете ежедневно? Или о том, к каким данным этот сайт имеет доступ? В этой статье мы рассмотрим только первый вопрос.

Теперь у каждого сайта есть свои собственные данные. На самом деле, некоторые сайты настолько ценны в плане данных, что существуют спортивные клубы, компании и индивидуальные разработчики, которые достигли успеха, занимаясь только этим делом. Например, представьте, что вы извлекаете все данные о командах, игроках, клубах и даже тренерах, начиная с 1960-х годов, с веб-сайта, посвященного спортивным данным, под названием Transfermarkt, и анализируете их в простой и понятной форме. С такими отчетами и информацией в ваших руках вы можете даже работать в спортивном агентстве или футбольном клубе в качестве спортивного директора или консультанта. Однако, к сожалению, вы не можете сделать это со всеми веб-сайтами или только в пределах ограничений, установленных сайтом.

Пока мы отложим в сторону веб-сайт Transfermarkt и рассмотрим небольшой обзор YÖK Atlas, который, хотя и имеет размер данных, составляющих всего 1/4, все равно имеет значительный объем данных, и изучим библиотеку Scrapy, которая является основой моего проекта.

Сначала, когда мы заходим на сайт, мы видим, что внутри него есть множество инструментов. Однако в этом проекте нам пригодится раздел Lisans Atlası.



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

Что же мы будем делать?

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



API - это, вкратце, слой, который предоставляет нам, разработчикам, доступ к данным сайта в более простом, понятном и структурированном виде. Благодаря API мы можем легко и безопасно получать доступ к сотням тысяч данных (в общей сложности речь идет о более чем 247 000 данных) изображенных выше.



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

И вот здесь вступает в игру другая тема, Scrapy.

Python и библиотека Scrapy в области Data Science

В последнее время вы наверняка часто слышали о Python и Data Science. Особенно в современном мире программирования Python стал не просто языком программирования, а неотъемлемым инструментом благодаря своим возможностям в области обработки данных, анализа данных, доступности, простоты изучения и скорости.



Перейдем к еще одному удивительному инструменту на основе Python - Scrapy

Scrapy - это библиотека Python, которая позволяет нам извлекать данные с веб-сайтов, содержащих любые наборы данных, о которых я упоминал выше. Она выделяется своими многочисленными функциями, интеграцией с базами данных и возможностью работать с другими фреймворками и инструментами. Особенно если вам приходится работать с большим проектом, например, в проекте YÖK Atlas, Scrapy - это идеальное решение для этой задачи. Без лишних слов я продемонстрирую, как эти аргументы подтверждаются на практике.


Обзор структуры файлов в Scrapy

Для запуска проекта с использованием Scrapy вам достаточно ввести в терминале следующую команду:

scrapy startproject projectname

После этого вы увидите файловую систему, представленную слева.

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

Теперь давайте кратко рассмотрим каждый из этих файлов.

init.py



Этот файл на самом деле присутствует во многих фреймворках на Python. Его цель - объединить различные файлы в структуре Scrapy и обеспечить их взаимодействие. Никаких операций с этим файлом выполнять не требуется.


spider.py

Или в моем проекте - atlasspider.py. Этот файл - основной файл, в котором мы выполняем все операции. Он содержит ссылки на сайт, где находятся данные, пути для парсинга (CSS или XPath), то есть все операции, которые мы выполняем в проекте. В веб-скрапинге структура, которая выполняет операцию парсинга, называется "пауком" или "спайдером", поэтому название этого файла - spider.


spider.py

На изображении выше показаны различные переменные и функции: Прежде всего, нам нужно дать имя нашей структуре паука в проекте. Это имя должно быть уникальным, чтобы не пересекаться с другими пауками, если они есть. Первая функция ниже - это функция start_request, которая отправляет нам HTTP-запрос, если мы даем ей структуру ссылок на сайт. Эта функция позволяет нам переходить по нескольким ссылкам (например, со скоростью 20 ссылок в секунду) и извлекать нужные данные. Функция parse, которая находится ниже, содержит код, который мы должны написать, чтобы извлечь каждый элемент данных, который представлен как HTML-элемент на сайте. Есть два метода, которые можно использовать для извлечения данных: CSS и XPath. Я предпочел использовать более надежный метод - XPath.

models.py


models.py

Этот файл позволяет нам выполнить необходимую кодировку, если мы хотим передать извлеченные данные в другую платформу (например, SQL, NoSQL или JSON). Например, так как это мой стажировочный проект после обучения SQL, мне нужно было подключиться к SQL-серверу. В этом случае я создал необходимые кодировки в файле, используя библиотеку Python под названием SQLAlchemy. SQLAlchemy - это библиотека Python, которая позволяет нам проектировать базу данных, не пиша ни одного SQL-запроса, а только с помощью структур данных и объектов Python. Конечно, вы можете создать базу данных вручную и использовать запросы, но этот метод не очень эффективен, особенно в больших проектах. Лично я, к сожалению, не смог получить правильный результат с этого метода.


models.py

items.py

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


items.py

settings.py

Перейдем к последнему и, возможно, самому важному файлу в этом проекте...

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


settings.py

pipelines.py

И, наконец, самый последний и, возможно, самый важный файл для этого проекта...

Как я уже упоминал, после извлечения всех этих данных, нам обязательно нужно передать их в другой формат или платформу. В этом файле мы создаем своего рода "трубопровод", который позволяет нам передавать все эти данные в нужную платформу. Название "pipelines" полностью соответствует его назначению.

Этот файл содержит код, который позволяет нам передавать все наборы данных, которые мы ранее разработали в файле models.py и преобразовали в объекты элементов с помощью файла items.py, в SQL-сервер или любую другую платформу.

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


pipelines.py

Вот и все, основные особенности Scrapy и структуры файлов.

Scrapy и другие библиотеки для парсинга веб-сайтов

Есть ли какие-либо другие инструменты или библиотеки для парсинга данных, кроме Scrapy?

Конечно, есть, но особенно для крупных проектов они значительно медленнее и менее функциональны по сравнению с Scrapy. Давайте рассмотрим эти другие инструменты и библиотеки, и в чем их отличия от Scrapy.



Beautiful Soup

Библиотека Beautiful Soup, подобно Scrapy, является инструментом для парсинга веб-сайтов. Благодаря этой библиотеке можно извлекать данные с веб-страниц в форматах XML, HTML, CSS, а также анализировать их для извлечения данных с одной или нескольких страниц.

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

Requests

Библиотека Requests на самом деле не является прямоугольной библиотекой для парсинга веб-страниц. Эта библиотека позволяет нам выполнять запросы к любому сайту или службе API в проекте Python с помощью операций запросов или запросов POST, работая с любым проектом или фреймворком, например Django или Flask.

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

Selenium

Selenium в основном является библиотекой для автоматизации тестирования веб-приложений. Его особенностью является возможность автоматизировать любой проект и подвергнуть его любому виду тестирования. Когда он используется в этом контексте, Selenium действительно полезен.

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



Если мы резюмируем



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

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

Я хотел бы закончить свою запись хорошей цитатой.

Единственный способ по-настоящему ощутить удовлетворение - сделать великолепную работу. Единственный способ сделать великолепную работу - по-настоящему любить то, что вы делаете.

  • Стив Джобс