Если вы когда-нибудь столкнетесь со сценарием, в котором вам нужно загружать данные из Интернета, вам понадобится использовать Python Web Crawler. В Python есть два хороших поисковых робота, которые можно использовать для этой цели: Scrapy и BeautifulSoup.

Что такое поисковые роботы? Что такое веб-скрапинг? Какой веб-сканер Python вы должны использовать, Scrapy или BeautifulSoup? Мы ответим на все эти вопросы здесь, в этой статье.

Веб-скрейпинг и веб-краулеры

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

Процесс парсинга веб-страниц полностью автоматизирован и осуществляется с помощью бота, которого мы называем «Web Crawler». Веб-сканеры создаются с использованием соответствующего программного обеспечения, такого как Python, с библиотеками BeautifulSoup и Scrapy.

BeautifulSoup против Scrapy

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

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

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

Возможности скрейпинга

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

Улучшенный парсинг

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

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

Используя другие классы и настройки, такие как Правила, вы также можете настроить поведение Scrapy Spider разными способами.

Параллельные запросы.

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

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

Файлы cookie и пользовательские агенты

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

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

Автодроссель

Одна из основных причин, по которой веб-сайты могут обнаруживать пауков Scrapy (или любого паука в целом), связана с тем, насколько быстро выполняются запросы. Все становится еще хуже, когда ваш Scrapy Spider замедляет работу веб-сайта из-за большого количества запросов за короткий промежуток времени.

Чтобы предотвратить это, в Scrapy есть опция AutoThrottle. Включение этого параметра заставит Scrapy автоматически регулировать скорость очистки паука в зависимости от нагрузки трафика на целевом веб-сайте.

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

Ограничение скорости

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

Разница между этим параметром и AutoThrottle заключается в том, что ограничение скорости включает использование фиксированных задержек, тогда как AutoThrottle автоматически регулирует задержку на основе нескольких факторов.

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

Прокси и VPN

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

Решением этой проблемы являются вращающиеся прокси и поддержка VPN, которые предлагает Scrapy. При этом вы можете изменить ситуацию так, чтобы каждый запрос приходил из другого места. Это максимально близко к полной маскировке присутствия вашего поискового робота.

Селекторы XPath и CSS

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

В частности, XPath — чрезвычайно гибкий способ навигации по HTML-структуре веб-страницы. Он более универсален, чем селекторы CSS, поскольку может перемещаться как вперед, так и назад.

Отладка и ведение журнала

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

Обработка исключений

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

Вывод

Если вы новичок, я бы порекомендовал BeautifulSoup вместо Scrapy. Это просто проще, чем Scrapy, почти во всех отношениях, от настройки до использования. Как только вы приобретете некоторый опыт, переход на Scrapy должен стать проще, поскольку у них есть пересекающиеся концепции.

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

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

На этом статья о Scrapy vs BeautifulSoup заканчивается. Любые предложения или вклады в CodersLegacy более чем приветствуются. Вопросы по содержанию статьи можно задать в разделе комментариев ниже.

Первоначально опубликовано на https://coderslegacy.com 11 октября 2020 г.