Scrapy — это фреймворк асинхронной обработки, основанный на Twisted, краулер-фреймворк, реализованный на чистом Python, с понятной архитектурой, низкой степенью связанности между модулями, сильной масштабируемостью и возможностью гибко удовлетворять различные потребности. Нам нужно всего лишь разработать несколько модулей, чтобы легко реализовать сканер.
1. Введение в архитектуру
Во-первых, давайте посмотрим на архитектуру фреймворка Scrapy, как показано на следующем рисунке.
Его можно разделить на следующие части.
Engine. Движок, который обрабатывает поток данных и запускает всю систему, является ядром всей инфраструктуры.
Item. Item, который определяет структуру данных результата обхода, и данные обхода будут присвоены объекту Item.
Scheduler. Планировщик принимает запрос, отправленный механизмом, и добавляет его в очередь, а также передает запрос механизму, когда механизм снова запрашивает.
Downloader. Загрузчик, загружает веб-контент и возвращает веб-контент пауку.
Spiders. Паук, который определяет логику сканирования и правила анализа веб-страницы, в основном отвечает за анализ ответа и создание результатов извлечения и новых запросов.
Item Pipeline. Конвейер элементов, отвечающий за обработку элементов, извлеченных с веб-страниц пауками, его основная задача — очистить, проверить и сохранить данные.
Downloader Middlewares. Промежуточное ПО загрузчика, связующее звено между движком и загрузчиком, в основном обрабатывает запросы и ответы между движком и загрузчиком.
Spider Middlewares. Промежуточное программное обеспечение паука, связующее звено между движком и пауком, в основном обрабатывает входной ответ паука, результат вывода и новый запрос.
2. Поток данных
Поток данных в Scrapy контролируется движком, и процесс потока данных выглядит следующим образом.
Engine сначала открывает веб-сайт, находит паука, который обрабатывает веб-сайт, и запрашивает у паука первый URL-адрес для сканирования.
Engine получает первый URL-адрес для сканирования от Spider и планирует его в форме запроса через планировщик.
Механизм запрашивает у планировщика следующий URL для обхода.
Планировщик возвращает следующий URL-адрес для сканирования в механизм, а механизм перенаправляет URL-адрес в загрузчик для загрузки через ПО промежуточного слоя загрузчика.
Как только страница загружена, загрузчик генерирует ответ страницы и отправляет его в механизм через ПО промежуточного слоя загрузчика.
Engine получает ответ от загрузчика и отправляет его в Spider для обработки через промежуточное ПО Spider.
Паук обрабатывает ответ и возвращает просканированный элемент и новый запрос механизму.
Механизм отправляет элемент, возвращенный пауком, в конвейер элементов и отправляет новый запрос планировщику.
Повторяйте шаг от второго до последнего, пока в Планировщике больше не останется Запросов, Движок закроет сайт и сканирование завершится.
Благодаря сотрудничеству нескольких компонентов, различной работе, выполняемой разными компонентами, и поддержке компонентов для асинхронной обработки Scrapy максимально использует пропускную способность сети и значительно повышает эффективность сканирования и обработки данных.
3. Структура проекта
Фреймворк Scrapy отличается от pyspider тем, что он создает проекты через командную строку, а для написания кода по-прежнему требуется IDE. После создания проекта файловая структура проекта выглядит следующим образом:
scrapy.cfg
project/
__init__.py
items.py
pipelines.py
settings.py
middlewares.py
spiders/
__init__.py
spider1.py
spider2.py
...
Функции каждого файла здесь описаны следующим образом.
scrapy.cfg: это файл конфигурации проекта Scrapy, который определяет путь к файлу конфигурации и информацию, связанную с развертыванием проекта.
items.py: Он определяет структуру данных Предмета, и все определения Предмета могут быть размещены здесь.
pipelines.py: он определяет реализацию конвейера элементов, и все реализации конвейера элементов могут быть размещены здесь.
settings.py: определяет глобальную конфигурацию проекта.
middlewares.py: определяет реализацию ПО промежуточного слоя Spider и ПО промежуточного слоя Downloader.
spiders: Он содержит реализацию каждого паука, и у каждого паука есть файл.
4. Вывод
В этом разделе представлена базовая архитектура, процесс потока данных и структура проекта платформы Scrapy. Позже мы узнаем больше об использовании Scrapy и почувствуем его мощь.
Этот ресурс был впервые опубликован в личном блоге Цуй Цинцай Цзин Ми:Практическое руководство по разработке веб-краулера на Python3 | Цзин Ми
Если вы хотите узнать больше информации о поисковых роботах, обратите внимание на мой личный публичный аккаунт WeChat: Coder of Attack.
WeChat.QQ.com/Day/5 Это радость VE Z…(автоматическое распознавание QR-кода)