Рубрики
Без рубрики

Устройство тестирования вашего веб-скребка

Цели: к концу этого учебника у вас будет отправная точка для написания тестов подразделения … Теги с Python, Web Scraping, TDD, наукой данных.

Цели:

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

Инструменты и Prereqs:

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

Шаг 1

Например, мы будем использовать https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html. . Этот веб-сайт – это услуга для практики Scraping Web. Первый шаг – решить, какие данные мы захочем собирать. К счастью, раздел «Информация о продукте» делает его легкой задачей. Мы собираем поля: UPC, тип продукта, цена ( без Налог), налог и доступность на складе.

Шаг 2

Мое первое предложение начинается до того, как мы начнем писать любой код. Я думаю, что весь ваш чистящий код должен быть организован вместе и проверен вместе. Поэтому вы должны отделить свой код очистки в файле «Clean.py».

touch clean.py

Шаг 3

С помощью Test-Give Development вы пишете тест перед записью вашего программного кода. Мне нравится использовать формат, похожий на Follow Format Ken Yeens ‘Format в «Tiny Python Project» (ссылка ниже). Он начинает с тестирования, что файл существует в правильном месте. Затем он отделяет каждый из тестов с комментарированным контуром.

import os

prg = './clean.py'


# -------------------------------------------------
def test_exists():
    """checks if the file exist"""

    assert os.path.isfile(prg)

Вы можете запустить тест, набрав это: Pytest -xv test.py Этот тест должен пройти, если это не убедитесь, что Clean.py находится в правильном каталоге.

Шаг 4.

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

# -------------------------------------------------
def test_price():
    """£51.77 -> 51.77 type float"""

    res = monetary('£51.77')
    assert res == float(51.77)`

Теперь, когда мы запустим тест, используя: pytest -xv test.py. . Мы увидим ошибку, которая очень велика.

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

Шаг 5.

Теперь мы можем написать код для этого теста. Этот код – это то, что я решил написать код; Там может быть более одного пути. Когда я пишу код для небольших проектов, мне нравится думать о двух советах, которые я прочитал из настоящих умных разработчиков. Во-первых, получите код, чтобы пройти тест и убедиться, что он делает то, что вы пытаетесь сделать. Во-вторых, не преодолевайте его с функциями, которые вы считаете, вам понадобится в будущем. Вот мой код:

import re


def monetary(value_field):
    """Returns a float for items that are values"""
    amount = re.sub('[^0-9.]', '', value_field)
    return float(amount)

Конечно, я мог бы написать это так:

def monetary(value_field):
    """Returns a float for items that are values"""
    amount = value_field[1:]
    return float(amount)

И для этого проекта было бы хорошо. Я использовал Regex, потому что в любое время я вижу персонажей, я думаю о себе: «Просто используйте Regex». Тем не менее, это не имеет значения, если вы получаете желаемый результат.

Шаг 6:

Теперь пришло время сделать то же самое для написания теста и кода, который возвращает целое число для столбца доступности! Вы можете увидеть мой полный код и «ответ» по ссылке ниже под ресурсами.

Заключение

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

Быстрая сторона примечания

В моем проекте я сохраняю данные как NamedTuple в файле модели. В конце этой статьи будет ссылка на конец этой статьи с большим количеством информации о NameedTupes, если вы не использовали один ранее.

Ресурсы:

Чистые архитектуры: https://leanpub.com/Clean-architectures-in-python Крошечные проекты Python: https://github.com/kyclark/tiny_python_projects. NamedTuple: https://dbader.org/blog/writing-clean-python-with-amedttupes Мой код: https://github.com/albertulysses/beautiful-test.

Оригинал: “https://dev.to/albertulysses/unit-testing-your-web-scraper-1aha”