Как сделать парсинг веб-страниц быстрым и точным с помощью Scrapy?


Обзор
Когда речь идет о сборе данных, парсинг веб-страниц играет важную роль в получении большого объема и разнообразия данных из интернета. Для энтузиастов науки о данных количество доступных данных через Веб похоже на воду в океане. Например, если вы собираетесь купить какой-то продукт через интернет-платформу, как было бы здорово, если бы вы смогли спарсить сайты электронной коммерции и получить отзывы о том же продукте от покупателей! Возможности использования бесконечны.
К моменту завершения этой статьи вы узнаете, как делать парсинг с использованием фреймворка Scrapy и будете парсить несколько веб-сайтов - приступим к статье!
Обзор Scrapy
Scrapy - это фреймворк для парсинга веб-страниц на основе Python, используемый для извлечения необходимых данных с веб-сайтов. Это быстрый, простой и расширяемый способ получения данных.
Начало работы с Scrapy
Прежде чем начать, убедитесь, что у вас установлен Python на вашей системе. Вы можете проверить его успешную установку, введя "python" в командной строке.
$ python
Python 3.10.2 (tags/v3.10.2:a58ebcc, Jan 17 2022, 14:12:15)
Type "help", "copyright", "credits" or "license" for more information.
>>>
При успешной установке вы получите информацию о текущей версии Python. Здесь у меня установлена версия 3.10.2 на моей локальной системе.
Теперь с помощью следующей команды вы можете установить фреймворк Scrapy на вашей локальной системе.
$ pip install scrapy
Создание первого проекта парсинга
Давайте создадим новый проект парсинга, выполнив следующую команду.
$ scrapy startproject ИмяПроекта
В моем случае, я использую имя паука "ПервыйПарсер", что будет выглядеть примерно так:
$ scrapy startproject ПервыйПарсер
Это создаст папку "ПервыйПарсер" со следующей структурой:
На данный момент два файла являются важными:
- settings.py : Настройки вашего проекта.
- spiders/ : Папка, где хранятся все созданные пауки. В момент, когда вы запускаете парсер, Scrapy будет искать его в этой папке.
Создание первого паука в Scrapy
В Scrapy, в основном, паук представляет собой файл на языке Python, в котором содержатся все скрипты для парсинга.
Прежде всего, давайте перейдем в директорию FirstScraper и создадим наш первый паук.
С помощью команды "genspider" в командной строке можно автоматически создать паук.
Она принимает два аргумента: первый - это имя вашего паука, а второй - URL веб-сайта.
$ scrapy genspider QuotesScraper https://quotes.toscrape.com/
Это создаст новый файл паука "QuotesScraper.py" в папке spiders/ со следующим базовым шаблоном:
import scrapy
class QuotesScraperSpider(scrapy.Spider):
name = "QuotesScraper"
allowed_domains = ["quotes.toscrape.com"]
start_urls = ["http://quotes.toscrape.com/"]
def parse(self, response):
pass
Что следует отметить здесь:
- name: Имя паука, в нашем случае это "QuotesScraper".
- allowed_domains: Список URL-адресов, которые должны быть доступны только для нашего паука.
- parse(self, response): При успешном парсинге вызывается эта функция, и с помощью объекта response мы можем извлечь все данные, которые нам нужны с веб-страницы по заданному URL-адресу.
Парсинг веб-сайта с использованием Scrapy
Вот веб-сайт Quotes to Scrape, обычно используемый для изучения парсинга. И мы собираемся его спарсить.

С данного сайта я хочу спарсить все цитаты и имена их авторов. Для этого я создал следующий XPath в функции parse.XPath: XPath - это просто адрес определенного элемента HTML.
import scrapy
class QuotesScraperSpider(scrapy.Spider):
name = "QuotesScraper"
allowed_domains = ["quotes.toscrape.com"]
start_urls = ["http://quotes.toscrape.com/"]
def parse(self, response):
quotes = response.xpath("/html/body/div/div[2]/div[1]/div/span[1]/text()").extract()
authors = response.xpath("/html/body/div/div[2]/div[1]/div/span[2]/small/text()").extract()
for quote, author in zip(quotes, authors):
quote_detail = {
"quote": quote,
"written by": author
}
yield quote_detail
Теперь, выполнив следующую команду, мы можем начать процесс парсинга:
$ scrapy crawl QuotesScraper
Здесь я указал имя моего паука "QuotesScraper". В вашем случае оно будет отличаться. Теперь в нашем терминале мы можем увидеть все спарсенные цитаты с именами авторов.

Теперь пришло время узнать, чем Scrapy отличается от других инструментов для парсинга веб-сайтов. В Scrapy с помощью одной команды можно извлечь все спарсенные данные в формате json, xml и csv. Например, если мы хотим получить те же спарсенные данные в формате csv, нам просто нужно выполнить следующую команду.
$ scrapy crawl SpiderName -O FileName.Format(csv,xml,json)
В моем случае я хочу получить все данные в формате csv. Поэтому команда будет выглядеть примерно так.
$ scrapy crawl QuotesScraper ScrapedQuotes.csv
В результате у меня появился файл с названием "ScrapedQuotes.csv" в текущей директории моего проекта Scrapy, который выглядит примерно так.

Помимо этого, Scrapy предоставляет множество других функций, таких как переход по другим ссылкам, вход в систему с использованием csrf (межсайтовой подделки запросов), обход ограничений с помощью user-agent и прокси-серверов, несоблюдение правил robots.txt и т. д., которые все можно изучить в документации Scrapy.
Заключение
В заключение, хотя существует множество инструментов для парсинга веб-страниц в современном мире, Scrapy предлагает огромные преимущества по сравнению с другими, что действительно может быть благом для нас при парсинге веб-сайтов. Быстрый, простой и расширяемый способ.