Веб-скрейпинг с Python: введение и руководство

Веб-скрейпинг с Python Изучение

Всемирная паутина состоит из миллиардов взаимосвязанных документов, широко известных как веб-страницы. Исходный код веб-сайтов написан на языке гипертекстовой разметки (HTML). Исходный HTML-текст представляет собой смесь удобочитаемой информации и машиночитаемых кодов, так называемых тегов. Веб-браузер — например. B. Chrome, Firefox, Safari или Edge — обрабатывает исходный текст, интерпретирует теги и отображает содержащуюся в них информацию для пользователя.

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

Далее мы объясним, почему язык Python особенно хорошо подходит для создания парсеров, и дадим вам вводную информацию с соответствующим учебным пособием.

Зачем использовать Python для парсинга веб-страниц?

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

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

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

Веб-скрапинг с первого взгляда

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

  1. Получить веб-сайт по URL-адресу
  2. Автоматическое извлечение структурированных данных по шаблонам
  3. Обобщайте, сохраняйте, оценивайте, комбинируйте и т. д. извлеченную информацию.

Примеры использования веб-скрейпинга

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

  • Создавать базы контактов
  • Отслеживайте и сравнивайте цены онлайн-предложений
  • Объединяйте данные из разных онлайн-источников
  • Отслеживайте присутствие и репутацию в Интернете
  • Собирайте финансовые, погодные и другие данные
  • Мониторинг веб-контента на наличие изменений
  • Собирать данные для исследовательских целей
  • Выполнять интеллектуальный анализ данных

Наглядный пример парсинга веб-страниц

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

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 для сбора личных данных.

Читайте также:  Как правильно выбрать стиль элемента с помощью CSS селекторов ID и CLASS

Технические ограничения парсинга веб-страниц

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

Для ограничения доступа парсеров был установлен стандарт 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

Далее мы рассмотрим преимущества и недостатки трех технологий.

Читайте также:  Продвинутые возможности TypeScript - Использование infer и условных типов на примерах

Веб-скрапинг с помощью 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.

Читайте также:  Как выборочно удалить строки по частичному текстовому соответствию из ячейки pandas

Парсинг веб-страниц с помощью Python и BeautifulSoup

Здесь мы покажем вам, как использовать BeautifulSoup для извлечения данных с веб-страницы. Сначала вам нужно установить Python и некоторые инструменты. Тебе нужно:

  • Python с версии 3.4
  • Pip менеджера пакетов Python
  • Модуль venv

Пожалуйста, следуйте инструкциям на странице установки Python, чтобы установить.

Если в вашей системе установлен бесплатный менеджер пакетов Homebrew, вы также можете установить Python с помощью следующей команды:

brew install python

Настройте проект парсинга веб-страниц Python на своем устройстве

Мы хотим создать папку проекта веб-скребка для учебника по Python на рабочем столе. Откройте командную строку (Terminal.App на Mac), скопируйте и вставьте в терминал следующие строки кода и запустите их:

# In den Desktop-Ordner wechseln
cd ~/Desktop/

# Projektverzeichnis anlegen
mkdir ./web Scraper/ && cd ./web Scraper/

# Virtuelle Umgebung anlegen
# stellt u. a. sicher, dass später pip3 verwendet wird
python3 -m venv ./env

# Virtuelle Umgebung aktivieren
source ./env/bin/activate

# Pakete installieren
pip install requests
pip install beautifulsoup4

Соберите цитаты и авторов с помощью 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.

pip3 install <package></package>

2. Включите модули в скрипт Python с помощью import.

from <package> import <module></module></package>

В проектах парсинга веб-страниц часто используются следующие пакеты:

package  use
venv Управление виртуальной средой для проекта
request получить веб-страницы
lxml Используйте альтернативные парсеры для HTML и XML
CSV Чтение и запись табличных данных в формате CSV
pandas обрабатывать и оценивать данные
scrapy использовать очистку
selenium Используйте веб-драйвер Selenium
Оцените статью
Блог о программировании
Добавить комментарий