Всемирная паутина состоит из миллиардов взаимосвязанных документов, широко известных как веб-страницы. Исходный код веб-сайтов написан на языке гипертекстовой разметки (HTML). Исходный HTML-текст представляет собой смесь удобочитаемой информации и машиночитаемых кодов, так называемых тегов. Веб-браузер — например. B. Chrome, Firefox, Safari или Edge — обрабатывает исходный текст, интерпретирует теги и отображает содержащуюся в них информацию для пользователя.
Специальное программное обеспечение используется для извлечения из исходного кода только интересующей людей информации. Эти программы, известные как «веб-скраперы», «сканеры», «пауки» или просто «боты», выполняют поиск в исходном коде веб-страниц в соответствии с заранее заданными шаблонами и извлекают содержащуюся в нем информацию. Информация, полученная с помощью парсинга веб-страниц, обобщается, комбинируется, оценивается или сохраняется для дальнейшего использования.
Далее мы объясним, почему язык Python особенно хорошо подходит для создания парсеров, и дадим вам вводную информацию с соответствующим учебным пособием.
- Зачем использовать Python для парсинга веб-страниц?
- Веб-скрапинг с первого взгляда
- Примеры использования веб-скрейпинга
- Наглядный пример парсинга веб-страниц
- Юридические риски парсинга веб-страниц
- Технические ограничения парсинга веб-страниц
- API как альтернатива веб-скрапингу
- Инструменты веб-скрейпинга Python
- Веб-скрапинг с помощью Scrapy
- Веб-скрапинг с помощью Selenium
- Веб-скрейпинг с BeautifulSoup
- Сравнение инструментов веб-скрейпинга Python
- Парсинг веб-страниц с помощью Python и BeautifulSoup
Зачем использовать Python для парсинга веб-страниц?
Популярный язык программирования Python хорошо подходит для создания программного обеспечения для парсинга веб-страниц. Поскольку веб-сайты постоянно обновляются, веб-контент со временем меняется. Например, корректируется дизайн или добавляются новые компоненты страницы. Веб-парсер написан для конкретной структуры страницы. При изменении структуры страницы необходимо настроить парсер. Это особенно легко сделать с Python.
Кроме того, Python чрезвычайно силен в области обработки текстов и поиска веб-ресурсов; оба являются техническими основами для парсинга веб-страниц. Кроме того, Python является признанным стандартом для анализа и обработки данных. Помимо общей пригодности языка, Python впечатляет процветающей экосистемой программирования. Сюда входят библиотеки, проекты с открытым исходным кодом, документация и справочник по языку, а также сообщения на форуме, отчеты об ошибках и статьи в блогах.
В частности, существует несколько хорошо спроектированных инструментов для парсинга веб-страниц с помощью Python. Мы представляем три известных инструмента Scrapy, Selenium и BeautifulSoup здесь. В качестве практического упражнения вы можете использовать наш учебник по парсингу веб-страниц на основе BeautifulSoup с помощью Python. Это позволяет вам очень непосредственно следить за процессом скрейпинга.
Веб-скрапинг с первого взгляда
Базовая схема процесса шабрения быстро объясняется. Сначала разработчик Scraper анализирует исходный HTML-текст интересующей страницы. Обычно существуют четкие шаблоны, которые можно использовать для извлечения нужной информации. Скребок запрограммирован на эти шаблоны. Всю остальную работу парсер выполняет автоматически :
- Получить веб-сайт по URL-адресу
- Автоматическое извлечение структурированных данных по шаблонам
- Обобщайте, сохраняйте, оценивайте, комбинируйте и т. д. извлеченную информацию.
Примеры использования веб-скрейпинга
Веб-скрапинг можно использовать разными способами. Помимо индексации поисковыми системами, используется веб-скрапинг, например. используется для следующих целей:
- Создавать базы контактов
- Отслеживайте и сравнивайте цены онлайн-предложений
- Объединяйте данные из разных онлайн-источников
- Отслеживайте присутствие и репутацию в Интернете
- Собирайте финансовые, погодные и другие данные
- Мониторинг веб-контента на наличие изменений
- Собирать данные для исследовательских целей
- Выполнять интеллектуальный анализ данных
Наглядный пример парсинга веб-страниц
Представьте себе веб-сайт, который предлагает продажу подержанных автомобилей. Если вы зайдете на страницу в браузере, то увидите список автомобилей. Давайте посмотрим на исходный код для ввода автомобиля в качестве примера:
raw_html = """ <h1>Gebrauchtwagen zum Kauf</h1> <ul class="cars-listing"> <li class="car-listing"> <div class="car-title"> Volkswagen Käfer </div> <div class="car-description"> <span class="car-make">Volkswagen</span> <span class="car-model">Käfer</span> <span class="car-build">1973</span> </div> <div class="sales-price"> € <span class="car-price">14.998,—</span> </div> </li> </ul> """
Веб-скрапер может искать список подержанных автомобилей, доступный в Интернете. В зависимости от замысла создателя парсер ищет конкретную модель; в нашем примере это Volkswagen Beetle. В исходном коде спецификации марки и модели автомобиля отмечены классами CSS «car-make» и «car-model». Имена классов упрощают сбор нужной информации. Вот пример использования BeautifulSoup:
# den in raw_html gespeicherten HTML-Quelltext parsen html = BeautifulSoup(raw_html, 'html.parser') # den Inhalt des Tags mit Klasse 'car-title' extrahieren car_title = html.find(class_ = 'car-title').text.strip() # falls es sich bei diesem Auto um einen Volkswagen Käfer handelt if (car_title == 'Volkswagen Käfer'): # vom Titel des Autos zum umschließenden <li>-Tag aufsteigen html.find_parent('li') # den Preis des Autos ermitteln car_price = html.find(class_ = 'sales-price').text.strip() # den Preis des Autos ausgeben print(car_price)
Юридические риски парсинга веб-страниц
Каким бы практичным ни был просмотр веб-страниц, он также несет в себе юридические риски. Поскольку оператор веб-сайта фактически предоставляет свой сайт для использования человеком, автоматическое извлечение с помощью веб-скребка может представлять собой нарушение условий использования. Это особенно верно, когда большой объем выборки выполняется на нескольких страницах одновременно или в высокой последовательности. Человек не мог взаимодействовать с сайтом таким образом.
Кроме того, автоматический поиск, хранение и оценка данных, опубликованных на веб-сайте, могут представлять собой нарушение авторских прав.Если полученная информация является данными, позволяющими установить личность, хранение и оценка без согласия заинтересованного лица нарушает применимые правила защиты данных. Например, нельзя очищать профили Facebook для сбора личных данных.
Технические ограничения парсинга веб-страниц
Операторы веб-сайтов часто заинтересованы в ограничении автоматического парсинга своих онлайн-предложений. С одной стороны, массовый доступ парсеров к сайту может негативно сказаться на работоспособности сайта. С другой стороны, часто есть внутренние области веб-сайта, которые не должны отображаться в результатах поиска.
Для ограничения доступа парсеров был установлен стандарт robots.txt : оператор веб-сайта хранит текстовый файл с именем robots.txt в главном каталоге веб-сайта. В файле используются специальные записи для определения того, каким скрейперам или ботам разрешен доступ к тем или иным областям веб-сайта. Записи в robots.txt всегда относятся ко всему домену.
Вот пример файла robots.txt, который запрещает парсинг любым ботам на всем сайте:
# Jeglicher Bot User-agent: * # Gesamtes Hauptverzeichnis ausschließen Disallow: /
Файл robots.txt является добровольным ограничением. Боты должны соответствовать спецификациям; Однако это не может быть реализовано технически. Чтобы эффективно регулировать доступ парсеров, операторы веб-сайтов также используют более агрессивные методы: с одной стороны, доступ парсеров может быть ограничен ограничением пропускной способности; с другой стороны, IP-адрес парсера может быть заблокирован в случае повторного доступа, противоречащего спецификациям.
API как альтернатива веб-скрапингу
Хотя просмотр веб-страниц полезен, он не является предпочтительным подходом к получению данных с веб-сайтов. Часто есть лучший способ: многие операторы веб-сайтов предоставляют данные в структурированном, машиночитаемом формате. Доступ к данным осуществляется через специальные интерфейсы программирования, так называемые интерфейсы прикладного программирования (API).
Преимущества использования API значительны:
- API явно предоставляется поставщиком для доступа к данным : это приводит к меньшим юридическим рискам, и поставщик может лучше регулировать доступ к данным. Например, для доступа к данным может потребоваться ключ API. Провайдер также может более точно реализовать ограничение пропускной способности.
- API немедленно предоставляет данные в машиночитаемом формате : это устраняет утомительную задачу извлечения данных из исходного текста. Кроме того, структура данных отделена от визуального представления. Таким образом, структура остается неизменной даже при изменении дизайна сайта.
Если API доступен и предоставляет полные данные, это предпочтительный способ доступа к данным. Тем не менее, применяется следующее: В принципе, парсинг может использоваться для доступа ко всем текстам, представленным на веб-сайтах в удобочитаемом формате.
Инструменты веб-скрейпинга Python
В экосистеме Python есть несколько устоявшихся инструментов для реализации проекта парсинга веб-страниц:
- scrapy
- Selenium
- BeautifulSoup
Далее мы рассмотрим преимущества и недостатки трех технологий.
Веб-скрапинг с помощью Scrapy
Инструмент веб-скрейпинга Python Scrapy использует анализатор HTML для извлечения информации из исходного HTML-кода страницы. В результате получается следующая схема парсинга веб-страниц с помощью Scrapy:
URL → HTTP request → HTML → Scrapy
Основной концепцией разработки парсеров с помощью Scrapy являются парсеры, называемые «Web Spiders». Это небольшие программы, основанные на Scrapy. Каждый паук запрограммирован на очистку определенного веб-сайта, двигаясь из стороны в сторону, как паук, носящий его имя. Здесь используется объектно-ориентированное программирование: каждый паук — это отдельный класс Python.
В дополнение к фактическому пакету Python установка Scrapy поставляется с инструментом командной строки. Пауки управляются с помощью этой шероховатой оболочки. Существующие пауки также могут быть загружены в Scrapy Cloud. Там пауков казнят по расписанию. Таким образом, даже большие сайты могут быть скопированы без использования вашего собственного компьютера и домашнего подключения к Интернету. Кроме того, вы можете настроить свой собственный сервер веб-скрейпинга с помощью программного обеспечения с открытым исходным кодом Scrapyd.
Scrapy — это зрелая платформа для парсинга веб-страниц с помощью Python. Архитектура инструмента основана на потребностях профессиональных проектов. Например, Scrapy содержит встроенный конвейер для обработки очищенных данных. Выборка страницы в Scrapy выполняется асинхронно; это означает, что несколько страниц могут загружаться параллельно. Таким образом, Scrapy хорошо подходит для парсинга проектов с большим объемом обрабатываемых страниц.
Веб-скрапинг с помощью Selenium
Бесплатное программное обеспечение Selenium — это платформа для автоматизированного тестирования программного обеспечения веб-приложений. Первоначально разработанный для тестирования веб-сайтов и веб-приложений, Selenium WebDriver с Python также можно использовать для очистки веб-сайтов. Хотя сам Selenium написан не на Python, к функциям программного обеспечения можно получить доступ из Python.
В отличие от Scrapy или BeautifulSoup, Selenium не работает с исходным HTML-кодом страницы. Вместо этого страница загружается в браузере без пользовательского интерфейса. Браузер интерпретирует исходный текст страницы и создает из него объектную модель документа (DOM). Этот стандартизированный интерфейс позволяет тестировать взаимодействие с пользователем: Имитация кликов и автоматическое заполнение форм. Результирующие изменения на странице отражаются в DOM. В результате получается следующая схема парсинга веб-страниц с помощью Selenium:
URL → HTTP request → HTML → Selenium → DOM
Поскольку DOM генерируется динамически, Selenium также можно использовать для очистки страниц, содержимое которых было создано с помощью JavaScript. Доступ к динамическому контенту — ключевое преимущество Selenium. На практике Selenium также можно использовать в сочетании со Scrapy или BeautifulSoup. Selenium предоставляет исходный код, а второй инструмент берет на себя синтаксический анализ и оценку. В этом случае получается следующая схема:
URL → HTTP Request → HTML → Selenium → DOM → HTML → Scrapy / BeautifulSoup
Веб-скрейпинг с BeautifulSoup
BeautifulSoup — старейший из популярных инструментов веб-скрейпинга Python. Как и Scrapy, это парсер HTML. В результате получается следующая схема парсинга веб-страниц с помощью BeautifulSoup:
URL → HTTP request → HTML → BeautifulSoup
В отличие от Scrapy, разработка Scraper с помощью BeautifulSoup не требует объектно-ориентированного программирования. Вместо этого парсер пишется как простой скрипт. Таким образом, BeautifulSoup, вероятно, является самым простым способом выудить конкретную информацию из «дневного супа».
Сравнение инструментов веб-скрейпинга Python
Каждый из трех представленных инструментов имеет свои преимущества и недостатки. Мы кратко изложили их для вас:
| scrapy | Selenium | BeautifulSoup | |
| Легко обучаема | ++ | + | +++ |
| Читать динамический контент | ++ | +++ | + |
| Реализуйте сложные приложения | +++ | + | ++ |
| Устойчивость к ошибкам HTML | ++ | + | +++ |
| Оптимизирован для скрейпинга | +++ | + | + |
| Уникальная экосистема | +++ | + | ++ |
Заключение
Итак, какой инструмент вы должны использовать для своего проекта? Короче говоря, если вам нужно быстро развиваться или вы просто хотите начать работу с Python и парсингом веб-страниц, используйте BeautifulSoup. Сложные веб-приложения могут быть реализованы на Python с помощью Scrapy — при условии, что у вас есть соответствующие ноу-хау. Используйте Selenium, если вашей основной задачей является парсинг динамического контента с помощью Python.
Парсинг веб-страниц с помощью Python и BeautifulSoup
Здесь мы покажем вам, как использовать BeautifulSoup для извлечения данных с веб-страницы. Сначала вам нужно установить Python и некоторые инструменты. Тебе нужно:
- Python с версии 3.4
- Pip менеджера пакетов Python
- Модуль venv
Пожалуйста, следуйте инструкциям на странице установки Python, чтобы установить.
Если в вашей системе установлен бесплатный менеджер пакетов Homebrew, вы также можете установить Python с помощью следующей команды:
Настройте проект парсинга веб-страниц Python на своем устройстве
Мы хотим создать папку проекта веб-скребка для учебника по Python на рабочем столе. Откройте командную строку (Terminal.App на Mac), скопируйте и вставьте в терминал следующие строки кода и запустите их:
Соберите цитаты и авторов с помощью Python и BeautifulSoup
Сайт Quotes to Scrape предлагает подборку цитат. Это предложение специально для тестов скрейпинга. Таким образом, нам не нужно беспокоиться о нарушении каких-либо условий использования.
Давайте начнем. Откройте командную строку (Terminal.App на Mac) и запустите интерпретатор Python из папки парсера вашего проекта Python. Для этого скопируйте в терминал следующие строки кода и запустите их:
# Zum Projektverzeichnis wechseln cd ~/Desktop/web Scraper/ # Virtuelle Umgebung aktivieren source ./env/bin/activate # Python-Interpreter starten # da wir uns in der virtuellen Umgebung befinden, wird python3 verwendet python
Теперь скопируйте и вставьте следующий код в командную строку интерпретатора Python. Затем нажмите Enter (при необходимости несколько раз), чтобы запустить код. Вы также можете сохранить код в виде файла scrape_quotes.py в папке вашего веб-проекта Scraper. В этом случае вы можете запустить скрипт Python с помощью команды python scrape_quotes.py.
Конечным результатом выполнения кода должен быть файл quotes.csv в папке вашего проекта веб-парсера Python. Это таблица с цитатами и авторами. Откройте файл с помощью программы для работы с электронными таблицами по вашему выбору.
# Module importieren import requests import csv from bs4 import BeautifulSoup # Adresse der Webseite url = "http://quotes.toscrape.com/" # GET-Request ausführen response = requests.get(url) # BeautifulSoup HTML-Dokument aus dem Quelltext parsen html = BeautifulSoup(response.text, 'html.parser') # Alle Zitate und Autoren aus dem HTML-Dokument extrahieren quotes_html = html.find_all('span', class_="text") authors_html = html.find_all('small', class_="author") # Die Zitate in einer Liste sammeln quotes = list() for quote in quotes_html: quotes.append(quote.text) # Die Autoren in einer Liste sammeln authors = list() for author in authors_html: authors.append(author.text) # Zum Testen: Einträge beiden Listen kombinieren und ausgeben for t in zip(quotes, authors): print(t) # Die Zitate und Autoren in einer CSV-Datei im aktuellen Verzeichnis speichern # Öffnen Sie die Datei mit Excel / LibreOffice, etc. with open('./zitate.csv', 'w') as csv_file: csv_writer = csv.writer(csv_file, dialect='excel') csv_writer.writerows(zip(quotes, authors))
Используйте пакеты Python для парсинга веб-страниц
Каждый проект веб-скрейпинга отличается: иногда вы просто хотите проверить страницу на наличие изменений; в других случаях вы обеспокоены сложными оценками. Для Python доступен широкий спектр пакетов.
1. Установите пакеты в командной строке с помощью pip3.
2. Включите модули в скрипт Python с помощью import.
В проектах парсинга веб-страниц часто используются следующие пакеты:
| package | use |
| venv | Управление виртуальной средой для проекта |
| request | получить веб-страницы |
| lxml | Используйте альтернативные парсеры для HTML и XML |
| CSV | Чтение и запись табличных данных в формате CSV |
| pandas | обрабатывать и оценивать данные |
| scrapy | использовать очистку |
| selenium | Используйте веб-драйвер Selenium |








