개발자

크롤링 하는 데이터가 많을때는 어떻게 하나요?

2024년 05월 10일조회 181

데이터 분석 프로젝트 진행중인 대학생입니다 코드 자체는 문제 없이 잘 되는데 가져와야할 데이터가 많아서 실행시간이 너무 길어지는데 분산처리나 병렬처리를 통해 해결할 수 있을까요? 해결할 수 있다면 어떤걸 공부해야할까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

디큐님의 프로필 사진

정석적인 접근은 크롤링하는 잡 갯수만큼 병렬처리 즉 인스턴스를 더 띄우는 방법이 있겠습니다. 하지만 간단하게 해결하시려면 카테고리 id나 갯수로 청크를 나누셔서 멀티 프로세스를 띄우는 것도 방법입니다. 예를 들어 스크립트를 실행할때 인자로 0부터 9까지의 숫자를 부여하고, 각각 10등분된 청크만을 크롤링하도록 하는거죠.

profile picture

익명

작성자

2024년 05월 11일

청크로 나눠서 멀티프로세싱으로 가져오니까 그냥 실행할때와 확연히 차이가 납니다. 감사합니다.

백승윤님의 프로필 사진

우선 이전 답변자 분이 알려주신대로 멀티프로세싱을 활용해서 시간 줄이셨다니 다행이네요! 저는 추가적으로 코드 상에 비효율이 존재하진 않는지 확인해보시는 걸 추천드립니다. 우리가 pandas를 쓸때도 for문을 써서 각 row마다 처리를 한다던지 등 제대로 사용하지 못하는 부분들이 있을 수 있잖아요? 이런 부분들을 체크해보시면 좋을 것 같아요. 이걸 우리는 프로파일링이라고 하는데요. 코드 상에서 어디가 시간이 많이 소요되고 메모리가 많이 필요한지 파악해 병목을 해결해볼 수 있습니다. 이런 디버깅을 하실 때 line_profiler 라는 라이브러리를 사용해보시는 걸 추천드려요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 05월 10일

네, 크롤링을 할 때 데이터의 양이 많으므로 실행시간이 길어지는 경우가 많습니다. 이를 해결하는 방법으로 분산처리나 병렬처리를 사용할 수 있습니다. 분산처리(distributed processing)는 여러 컴퓨터가 네트워크로 연결되어서 하나의 시스템처럼 동작하게 하고, 각 컴퓨터에 작업을 분배하여 처리하는 것입니다. 특히, 큰 규모의 데이터를 처리할 때 효율적입니다. 병렬처리는 하나의 컴퓨터에서 여러 개의 CPU 또는 코어를 사용하여 작업을 동시에 처리하는 것입니다. 작업을 분할하여 CPU 또는 코어 여러 개에 할당하면 더 빠르게 작업을 완료할 수 있습니다. 파이썬에서 병렬처리를 구현하기 위해선 `multiprocessing`, `concurrent.futures` 같은 모듈을 공부해보면 좋습니다. 이 모듈들을 이용하면 좀 더 프로그램을 효율적으로 다룰 수 있게 됩니다. 분산처리의 경우에는 Hadoop, Spark와 같은 도구를 활용해서 학습하는 것이 좋습니다. 이러한 도구들은 대규모 데이터를 처리하는 데 유용합니다. 그러나 분산처리 및 병렬처리는 적용하기 전에 크롤링하고자 하는 사이트의 로봇 배제 표준을 확인하시기 바랍니다. 일부 웹사이트에서는 짧은 시간 동안 너무 많은 요청을 받으면 차단할 수 있기 때문입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!