Веб-парсинг, Автоскребок

Надежный и отказоустойчивый веб-парсинг с помощью AutoScrape

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

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

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

Мотивация

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

Нормальная разработка программного обеспечения для утилизации начинается слева и продолжается с ручных шагов: анализ веб-сайта, чтение исходного кода, извлечение Xpath и вставка их в код. Единственный автоматизированный процесс - запустить программу-сборщик для извлечения. Созданные этим методом парсеры склонны к взлому или иногда к извлечению некорректных данных, результат необходимо проверять после каждого парсинга. Это дополняет общие требования к техническому обслуживанию скребка для рулонов.

Основная проблема для веб-парсеров, построивших этот подход, заключается в том, как они идентифицируют элементы веб-страницы, с которыми они взаимодействуют или извлекают из них: Селекторы XPath. Браузеры видят веб-страницы как иерархическое дерево элементов, известное как объектная модель документа (DOM), начиная с самого верхнего элемента. Вот пример:

Example webpage DOM
           html
             |
      ---------------
      |             |
     head          body
      |             |
  --------     ----------
  |      |     |   |    |
title  style  h1  div footer
                   |
                 button

XPath - это язык для идентификации частей веб-страницы путем отслеживания пути от вершины DOM к указанным элементам. Например, чтобы идентифицировать кнопку в нашем примере DOM выше, мы должны начать с верхнего HTML-тега и перейти к кнопке, которая дает нам следующий селектор XPath:

/html/body/div/button

Как видите, селектор XPath, ведущий к кнопке, зависит от элементов над ним. Итак, если веб-разработчик решает изменить макет и переключает div на что-то другое, то наш XPath - и наш скребок - не работают.

Автоскрэп

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

Он работает на трех основных принципах, чтобы сократить объем технического обслуживания, необходимого при работе со скребками:

Ориентируйтесь, как люди.

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

Извлечение как отдельный шаг.

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

Максимально защищайте извлечение из изменений страницы.

Извлечение данных из HTML-страниц обычно включает использование XPath, извлечение данных в столбцы, преобразование этих столбцов данных в строки записей и их экспорт. В AutoScrape этого полностью удалось избежать за счет использования существующего предметно-ориентированного языка шаблонов для извлечения JSON из HTML под названием Hext. Хекстовые шаблоны, как их называют, очень похожи на HTML, но включают синтаксис для извлечения данных. Чтобы упростить создание этих шаблонов, система AutoScrape включает в себя конструктор шаблонов Hext. Пользователи загружают одну из очищенных страниц, содержащих данные, и для отдельной записи щелкают и маркируют каждое из значений в ней. Как только это будет сделано, аннотированный HTML-код выбранной записи можно преобразовать в шаблон Hext. Затем извлечение данных JSON представляет собой массовую обработку очищенных страниц с помощью инструмента и шаблона Hext.

Есть два метода запуска AutoScrape:

  • как локальный скрипт python CLI
  • полноценный веб-интерфейс для парсинга

Установка

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

pip install autoscrape[all]
autoscrape --backend requests --output outdir --maxdepth 2 https://bxroberts.org

or:

git clone https://github.com/brandonrobertz/autoscrape-py
cd autoscrape-py/
pip install .[all]
autoscrape --backend requests --output outdir --maxdepth 2 https://bxroberts.org

Обратите внимание, что для бэкэнда Selenium вам необходимо установить geckodriver или chromedriver, в зависимости от того, используете ли вы Firefox или Chrome соответственно.

Примеры использования

Ниже приведены некоторые из простых вариантов использования AutoScrape и способы выполнения инструмента CLI. По предположению все зависимости установлены.

Бэкенды краулера

Для управления AutoScrape доступны три бэкенда: requests, selenium и warc. Бэкэнд requests (по умолчанию) основан на библиотеке запросов Python и способен только сканировать сайты и отправлять простые формы HTTP. Для любого взаимодействия с формами или кнопками на базе JavaScript вам понадобится бэкэнд selenium.

Вы можете управлять серверной частью с помощью параметра - backend:

autoscrape \
  --backend requests \
  --output requests_crawled_site \
  'https://some.page/to-crawl'

Чтобы использовать бэкенды, отличные от запросов, вам необходимо установить соответствующие зависимости. pip install autoscrape [all] установит все необходимое для всех бэкэндов / функций, но вы также можете установить зависимости отдельно
* Selenium backend: pip install autoscrape [selenium-backend]
* Построитель графа сканирования (для использования in –save-graph) pip install autoscrape [graph]
* Бэкэнд WARC: pip install autoscrape [warc-backend]

Ползти

Просканируйте весь сайт, сохраняя весь HTML и таблицы стилей (без скриншотов):

autoscrape \
  --backend requests \
  --maxdepth -1 \
  --output crawled_site \
  'https://some.page/to-crawl'

Страница архива (снимок экрана и код)

Заархивируйте одну веб-страницу, как код, так и снимок экрана с полным содержанием (PNG), для дальнейшего использования:

autoscrape \
  --backend selenium \
  --full-page-screenshots \
  --load-images --maxdepth 0 \
  --save-screenshots --driver Firefox \
  --output archived_webpage \
  'https://some.page/to-archive'

Формы поиска и страницы результатов сканирования

Запросить веб-форму, идентифицируемую по тексту Я - форма поиска, введя ИМЯ в первое (0-е) поле ввода текста и выберите 20 января 1992 г. во втором (1-м) поле даты. Затем нажмите все кнопки с текстом Далее -› , чтобы открыть все страницы результатов:

autoscrape \
  --backend selenium \
  --output search_query_data \
  --form-match "I'm a search form" \
  --input "i:0:NAME,d:1:1992-01-20" \
  --next-match "Next ->" \
  'https://some.page/search?s=newquery'

Настройка автономного локального интерфейса командной строки

Внешние зависимости

Чтобы использовать selenium backend для интерактивного сканирования, у вас должен быть установлен geckodriver. Вы можете сделать это здесь:

https://github.com/mozilla/geckodriver/releases

Или через диспетчер пакетов:

apt install firefox-geckodriver

Для Chrome вам понадобится ChromeDriver. Его можно найти в диспетчере пакетов вашего дистрибутива или здесь.

Установить остальные зависимости Python можно с помощью pip.

Метод установки Pip

Затем настройте виртуальную среду Python (требуется Python 3.6) и установите зависимости Python:

pip install -r requirements.txt

Запуск автономного скребка

Поисковый робот Environment Test Crawler

Вы можете запустить тест, чтобы убедиться, что ваш веб-драйвер настроен правильно, запустив тестовый сканер:

./autoscrape --backend selenium --show-browser [SITE_URL]

Тестовый сканер просто выполняет сканирование всего веб-сайта только по кликам в глубину. Он не будет взаимодействовать с формами или данными POST. Данные будут сохранены в ./autoscrape-data/ (выходной каталог по умолчанию).

Скребок на основе ручной настройки

Автоскрапирование имеет режим ручного управления, аналогичный wget, за исключением того, что он использует интерактивные возможности и может вводить данные в формы поиска, переходить по кнопкам типа следующая страница и т. Д. Эту функциональность можно использовать либо как автономный сканер / парсер, либо как метод построения обучающего набора для автоматизированных скребков.

Ознакомьтесь со всеми опциями ручного режима Autoscrape здесь, чтобы использовать его в ручном режиме.

Веб-интерфейс AutoScrape (Docker)

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

Для этого нужно вытащить подмодуль autoscrape-www:

git submodule init
git submodule update

Это перенесет пользовательский интерфейс на основе браузера в папку www /.

Вам нужны docker-ce и docker-compose. После установки этих зависимостей просто запустите:

docker-compose build --pull
docker-compose up

Это создаст контейнеры и запустит сервер API, работающий на локальном порте 5000. Более подробную информацию о вызовах API можно найти в autoscrape-server.py.

Если вам нужно установить его, вы можете просто запустить make start.

Видеоурок

Последние мысли

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

Использование веб-среды значительно упростило бы процесс настройки параметров очистки и упростило бы запуск самого инструмента. Автоматическое построение экстракторов Hext можно упростить аналогичным образом за счет интеграции в веб-интерфейс. Реализация извлечения шаблона Hext на стороне клиента была включена в AutoScrape. Вместе эти улучшения могут помочь сделать обобщенный веб-парсинг более широкой исследовательской аудитории и активно изучаются.

Разработчик AutoScrape использует его как тестовую площадку для полностью автоматизированных скреперов. В конечном итоге, если вы предоставите URL-адрес AutoScrape, и он автоматически определит, что делать. Формы поиска содержат подсказки о том, как их использовать как в исходном коде, так и в отображаемом тексте. Эта информация, вероятно, может быть использована моделью машинного обучения, чтобы выяснить, как искать в форме, что открывает возможности для полностью автоматизированных парсеров.

Дальнейшее чтение

  1. Переосмысление веб-скрейпинга с помощью AutoScrape Брэндон Робертс
  2. Надежный веб-парсинг в общественных интересах с помощью AutoScrape
  3. Пакет PyPi Автоскрейп

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