[python] Marshmallow를 사용하여 웹 스크래핑 데이터 처리하기

웹 스크래핑은 인터넷 상의 데이터를 추출하는 프로세스입니다. 스크래핑한 데이터를 효과적으로 다루고 처리하기 위해서는 Marshmallow라는 파이썬 라이브러리를 활용할 수 있습니다.

Marshmallow는 데이터 직렬화와 역직렬화를 위한 유연하고 강력한 도구로, 스크래핑한 데이터를 다양한 형식으로 변환하고 조작할 수 있습니다. 이렇게 변환된 데이터를 원하는 대로 처리하여 필요한 결과를 얻을 수 있습니다.

Marshmallow 설치

먼저, Marshmallow를 설치해야 합니다. 아래의 명령어를 사용하여 pip를 통해 설치할 수 있습니다.

pip install marshmallow

스크래핑된 데이터를 Marshmallow 스키마로 변환하기

데이터를 처리하기 전에, Marshmallow 스키마를 정의해야 합니다. 스키마는 스크래핑한 데이터의 필드와 타입을 정의하는 역할을 합니다. 예를 들어, 아래와 같이 스키마를 정의할 수 있습니다.

from marshmallow import Schema, fields

class MySchema(Schema):
    name = fields.Str()
    age = fields.Int()

위의 예시에서는 nameage라는 필드를 가진 스키마를 정의하였습니다.

스크래핑한 데이터를 스키마에 맞게 직렬화하기

스크래핑한 데이터를 스키마에 맞게 직렬화하는 것은 매우 간단합니다. 스키마 객체를 생성한 후, dump() 메서드를 사용하여 데이터를 직렬화할 수 있습니다. 예를 들어, 다음과 같이 스크래핑한 데이터를 스키마에 맞게 직렬화할 수 있습니다.

data = {
    'name': 'John',
    'age': 30
}

schema = MySchema()
result = schema.dump(data)

result 변수에는 직렬화된 데이터가 저장됩니다.

직렬화된 데이터를 다루기

직렬화된 데이터를 다루는 방법은 다양합니다. 다음은 몇 가지 예시입니다.

필드 값에 접근하기

직렬화된 데이터의 필드 값에 접근하는 방법은 간단합니다. result 객체를 딕셔너리처럼 다룰 수 있습니다. 예를 들어, result['name']name 필드의 값을 가져옵니다.

데이터 유효성 검사하기

Marshmallow는 유효성 검사를 수행할 수도 있습니다. 스키마에 validate() 메서드를 추가하여 유효성 검사 로직을 구현할 수 있습니다. 예를 들어, 다음과 같이 스키마에 유효성 검사를 추가할 수 있습니다.

from marshmallow import validates, ValidationError

class MySchema(Schema):
    name = fields.Str()
    age = fields.Int()

    @validates('age')
    def validate_age(self, age):
        if age < 0:
            raise ValidationError("Invalid age value")

위의 예시에서는 age 필드가 0보다 작으면 유효하지 않다는 메시지를 반환합니다.

데이터 필터링하기

Marshmallow는 직렬화된 데이터를 필터링하는 기능도 제공합니다. 필터링은 원하는 필드만 추출하여 가져오기 위해 사용될 수 있습니다. 필터링을 하려면 only 또는 exclude 속성을 지정해야 합니다. 예를 들어, 다음과 같이 필터링할 수 있습니다.

schema = MySchema(only=('name',))
filtered_result = schema.dump(data)

위의 예시에서는 name 필드만 추출하여 필터링된 결과를 가져옵니다.

결론

Marshmallow를 사용하면 스크래핑한 데이터를 효과적으로 다룰 수 있습니다. 직렬화, 유효성 검사, 필터링 등의 다양한 기능을 제공하여 웹 스크래핑 데이터를 손쉽게 처리할 수 있습니다. Marshmallow를 활용하여 데이터 처리 작업을 간소화하여 생산성을 향상시킬 수 있습니다.

참고 자료