CoderCastrov logo
CoderCastrov
Коронавирус

Парсинг данных о коронавирусе с использованием Scrapy Python

Парсинг данных о коронавирусе с использованием Scrapy Python
просмотров
3 мин чтение
#Коронавирус

Мы собираемся собрать данные о коронавирусе с веб-сайта Worldometer.

Worldometers page we are about to scrape

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

В отличие от Scrapy существуют другие инструменты, написанные на языке Python, используемые для парсинга, такие как библиотека requests, BeautifulSoup, но эти инструменты не могут самостоятельно выполнять сложные задачи. Вот где Scrapy проявляет себя.

Говоря о Scrapy, у нас есть 5 основных компонентов:

5 main component of the Scrapy

Пауки (Spiders) - это классы, которые определяют, как будет выполняться парсинг определенного сайта (или группы сайтов), включая способ выполнения обхода (т.е. следование по ссылкам) и извлечение структурированных данных со страниц (т.е. парсинг элементов). Другими словами, пауки - это место, где вы определяете пользовательское поведение для обхода и парсинга страниц определенного сайта (или, в некоторых случаях, группы сайтов).

У нас есть разные типы пауков, такие как scrapy.Spider, CrawlSpider, XMLFeedSpider, CSVFeedSpider, SitemapSpider.

2. Пайплайны (Pipelines): Пайплайны относятся к способу извлечения данных, такому как очистка данных, удаление дубликатов, сохранение данных.

3. Промежуточные компоненты (Middlewares): Здесь мы выполняем все операции с запросами, которые отправляем на веб-сайт, и с ответами, которые получаем от веб-сайта.

4. Движок (Engine): Движок отвечает за координацию всех остальных компонентов. Другими словами, он обеспечивает согласованность всех операций, которые происходят.

5. Планировщик (Scheduler): Он отвечает за сохранение порядка операций. Технически говоря, это простая структура данных - очередь, которая следует принципу FIFO (первым пришел, первым вышел).

Начало работы с парсингом:

pip3 install scrapy pylint autopep8

Мы закончили процесс установки и теперь пришло время изучить scrapy. Когда мы запускаем команду scrapy в нашем терминале, мы увидим:

Мы видим, что после запуска команды scrapy у нас есть:

Scrapy 2.0.1 - нет активного проекта

Scrapy 2.0.1 - это версия scrapy, которую мы используем, и пока нет активного проекта, поэтому он показывает, что активного проекта нет. После этого мы видим:

Scrapy <command> [options] [args]

Начало создания проекта:

Наша основная цель - извлечь название стран и их общее количество случаев, общее количество смертей, общее количество выздоровевших, активные случаи и серьезные критические случаи в CSV-файле.

scrapy startproject worldometer

Создан новый проект Scrapy с именем "worldometer" с использованием базового шаблона (как показано на левой стороне). Теперь нам нужно создать паука, где мы сможем написать код для извлечения данных с веб-сайта. Чтобы сгенерировать паука, мы запустим следующую команду в командной строке.

cd worldometer **scrapy genspider covid **www.worldometers.info/coronavirus

genspider: команда для создания нового паука с использованием предопределенных шаблонов,

covid: имя паука, который мы собираемся создать,

В конце мы указываем ссылку на страницу, с которой мы собираемся парсить данные. Исходная ссылка будет выглядеть как https://www.worldometers.info/coronavirus/, мы удалим (https://) в начале и (/) в конце, чтобы получить www.worldometers.info/coronavirus, как показано на следующей картинке.

Сгенерированный базовый шаблон паука.

Как мы видим, в классе CovidSpider есть три атрибута:

name: Имя паука должно быть уникальным.

allowed_domains: Исходно вы можете увидеть allowed domains, как показано на рисунке, но вы можете изменить его на основной домен, например [‘www.worldometer.info’]

start_urls: Вам нужно внести некоторые изменения в этот атрибут

В классе covid у нас есть метод parse, в котором все результаты выражения XPath сохраняются в переменной, которую затем возвращаем.

scrapy crawl covid -o CoronaData_final.csv

Вышеуказанная команда используется для сохранения спарсенных данных в CSV-файле. Как мы видим, команда имеет следующий формат: scrapy crawl [имя паука] -o [имя файла(.csv или .json)]

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

Спарсенные данные Worldometer

Спасибо, счастливого кодинга...