이번 크롤링 과제를 통해 웹 크롤링, 데이터 저장, 버전 관리 등 다양한 기술을 익히고, 문제 해결 능력을 향상시킬 수 있었습니다. 어려움도 많았지만, 그 과정에서 얻은 경험과 지식은 앞으로 개발자로 성장하는 데 큰 도움이 될 것이라고 생각합니다. 특히, 실제 웹 페이지를 분석하고 데이터를 추출하는 과정에서 예상치 못한 문제들을 마주하며 더욱 성장할 수 있었습니다.
과제는 웹사이트에서 특정 데이터를 수집하여 데이터베이스에 저장하고, 수집된 데이터를 파일로 저장하는 것이었습니다. 목표는 웹 크롤링 기술 숙달, 데이터 수집 및 저장 과정 이해, 효율적인 개발 환경 구축 능력 향상이었습니다.
단순히 데이터를 가져오는 것을 넘어, 웹 페이지의 구조를 파악하고, 필요한 정보를 정확하게 추출하는 데 집중했습니다.
Poetry를 이용하여 개발 환경을 설정하면서 초기 설정에 어려움을 겪었습니다.
가상환경을 만들고, 필요한 패키지를 추가하는 과정에서 많은 시행착오를 겪었습니다.
# 프로젝트 초기화
poetry init
# 가상환경 활성화
poetry shell
# 필요한 패키지 추가
poetry add scrapy pymongo pandas openpyxl
위와 같이 간단한 명령어들을 사용하는 데도, 처음에는 제대로 작동하지 않아 답답했습니다. 하지만, 공식 문서를 꼼꼼히 읽고 여러 자료를 참고하며 문제를 해결했고, Poetry의 강력한 의존성 관리 기능에 감탄했습니다. 특히, poetry.lock 파일을 통해 프로젝트의 의존성을 완벽하게 관리할 수 있다는 점이 인상적이었습니다.
Scrapy를 이용하여 크롤러를 개발하는 과정은 시행착오의 연속이었습니다. 웹 페이지 구조 분석, 원하는 데이터 추출, 복잡한 CSS 선택자 사용 등 모든 것이 쉽지 않았습니다. 예를 들어, 특정 영역의 텍스트를 추출하기 위해 다음과 같은 코드를 사용해야 했습니다.
response.css('div.target-area::text').get()
하지만, 웹 페이지의 구조가 복잡하거나, 동적으로 생성되는 콘텐츠가 있는 경우에는 위와 같은 간단한 코드로 해결할 수 없었습니다. 이럴 때는 Scrapy의 강력한 기능인 XPath를 사용하거나, Selenium과 같은 도구를 연동하여 크롤러를 개발해야 했습니다.
Scrapy Pipeline을 이용하여 MongoDB에 데이터를 저장하는 과정은 데이터 저장의 중요성을 깨닫게 해준 경험이었습니다. MongoDB 설정, 컬렉션 생성, 데이터 삽입 등 기본적인 개념을 이해하는 데 시간이 걸렸습니다. 데이터베이스에 데이터를 저장하기 위해 다음과 같은 코드를 사용했습니다.
import pymongo
class MongoDBPipeline:
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DATABASE')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db['items'].insert_one(dict(item))
return item
위 코드는 MongoDB에 연결하고 데이터를 저장하는 기본적인 파이프라인입니다. 하지만, 실제 프로젝트에서는 데이터 중복을 방지하거나, 데이터 검증 로직을 추가하는 등 더욱 복잡한 파이프라인을 구현해야 했습니다.
수집된 데이터를 Pandas DataFrame으로 변환하여 파일로 저장하는 과정은 꼼꼼함의 중요성을 강조해주는 경험이었습니다. 데이터 정확성 검증, 예외 상황 처리 등을 통해 데이터 분석 및 파일 저장 기능을 익힐 수 있었습니다.
이번 과제를 통해 웹 크롤링, 데이터 저장, 버전 관리 등 다양한 기술을 익히고, 문제 해결 능력을 향상시킬 수 있었습니다. 앞으로도 꾸준히 학습하고, 다양한 프로젝트에 참여하면서 실력을 향상시켜나가겠습니다. 또한, 이번 과제를 통해 얻은 경험을 바탕으로 더 나은 결과물을 만들어낼 수 있도록 노력하겠습니다. 특히, 실제 웹 페이지를 크롤링하면서 마주치는 다양한 문제들을 해결해나가는 과정에서 더욱 성장할 수 있었습니다.