CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-страниц с помощью Scrapy и Django.

Парсинг веб-страниц с помощью Scrapy и Django.
просмотров
4 мин чтение
#Парсер

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

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

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

Scrapy позволяет нам определять структуры данных, писать парсеры и поставляется с встроенными CSS и XPath селекторами, которые мы можем использовать для извлечения данных. Парсеры делают GET-запрос на веб-сайт, разбирают HTML-ответ и извлекают целевые данные, используя определенные нами парсеры данных. Есть несколько форматов вывода, таких как JSON, CSV, XML. Результат также можно сохранить в базе данных.

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

Что мы строим

Мы собираемся создать приложение, которое будет собирать информацию о недвижимости, доступной для аренды или продажи. Эта информация будет собираться с веб-сайта realestatedatabase.

Предположения

Эта статья предполагает, что читатель имеет некоторые знания о парсинге веб-страниц, Scrapy и Django.

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

  • Python 3 (это приложение создано и протестировано с использованием python 3.7).
  • PostgreSQL.
  • Редактор кода.

Это приложение создано на основе Scrapy 2.0 и Django 3.0.

Установка зависимостей

Создайте базу данных PostgreSQL, учетные данные которой позже будут использоваться для подключения к приложению.

Создайте виртуальное окружение и активируйте его.

$ python3.7 -m venv venv
$ source venv/bin/activate

Установите Django и Scrapy.

pip install django scrapy

Установите другие зависимости, которые мы будем использовать.

pip install scrapy-djangoitem django-phone-field django-environ word2number

Создайте проект Django и создайте наше приложение "properties".

django-admin startproject main .python manage.py startapp properties

Создайте проект Scrapy, а затем добавьте его в INSTALLED_APPS в settings.py.

scrapy startproject scraper

Создайте модель для сохранения собранных данных. Обновите файл models.py в папке properties следующим образом.

Обновите settings.py с учетными данными для подключения к базе данных. Добавьте приложение properties и phone_field в INSTALLED_APPS. Учетные данные должны быть добавлены в файл **.**env, чтобы они оставались приватными.

Затем выполните миграции.

python manage.py makemigrations
python manage.py migrate

Элементы

Элемент используется для структурирования данных, полученных парсером. Django модель, созданная ранее, будет использоваться для создания элемента. DjangoItem - это класс элемента, который получает определение полей из Django модели, и здесь используется модель Property, определенная в основном приложении, созданном ранее. Обновите scraper/scraper/items.py.

Пайплайны.

Пайплайн элементов - это место, где данные обрабатываются после извлечения элементов из парсера. Пайплайн выполняет такие задачи, как валидация и сохранение элементов в базе данных. Обновите scraper/scraper/pipelines.py.

Парсеры

Определите, как будет производиться парсинг веб-сайта, включая способ обхода (т.е. следование по ссылкам) и извлечение структурированных данных с веб-страниц. Создайте парсер scraper/spiders/properties_spider.py.

У парсера есть следующие характеристики:

  • name: строка, которая его определяет.
  • allowed_domains: необязательный список строк, содержащий домены, которые этот парсер может обходить.
  • start_urls: список URL-адресов, с которых парсер начнет обход.
  • rules: список одного или нескольких объектов [**Rule**](https://docs.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Rule). Каждый [**Rule**](https://docs.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Rule) определяет определенное поведение для обхода сайта. link_extractor - это объект Link Extractor, который определяет, как будут извлекаться ссылки из каждой просканированной страницы, а call_back - это метод объекта парсера, который будет использоваться для каждой извлеченной ссылки с указанным извлекателем ссылок.
  • Item_loaders: предоставляют удобный механизм для заполнения извлеченных элементов. Метод add_css принимает поле элемента, в котором будут храниться извлеченные данные, и CSS-селектор, который используется для извлечения данных с веб-страницы. Метод load_item заполняет элемент собранными данными и возвращает его, после чего он сохраняется в базе данных через конвейер.

Обновите scraper/scraper/items.py с указанными значениями, чтобы активировать pipelines, добавьте user_agent, обновите spider_modules и newspider_modules.

Создайте команду Django, которую можно использовать для запуска обхода парсеров. Это инициализирует Django в парсере и необходимо для доступа к Django в парсере. Создайте папку management в папке scraper. В папке management создайте папку commands. Убедитесь, что все созданные файлы содержат файл __init__.py.

Создайте файл crawl.py в папке commands следующим образом.

Это будет использовать CrawlerProcess для запуска внутри проекта Django.

Чтобы запустить парсер и сохранить все свойства в базе данных, выполните следующую команду:

python manage.py crawl

В следующей статье мы создадим страницу для отображения всех свойств.

Так как это очень длинная статья, спасибо за чтение. УРА!!.

Код можно найти здесь.

Если вам понравилась эта статья, пожалуйста, свяжитесь со мной в Twitter @peterwade153. Электронная почта: peterwade153@gmail.com.

Ссылки. Я использовал статью Henriette Brand в качестве справочника. Она может быть найдена здесь.