쿠팡 상품 수집기(Python, Pyside6)
파이썬 GUI라고 검색하니까 대표적으로 Pyside랑 PyQt 프레임워크를 사용한다고 하길래,
Pyside6을 사용했다.
Pyside6 선택 이유
가장 큰 선택이유는 PyQT는 GPL 또는 상용 라이선스를 사용하고 Pyside는 LGPL 라이선스를 사용한다는 것이다
여기서 LGPL이란,
Lesser General Public License의 약자로서 자유 소프트웨어 라이센스이다.
결론적으로
LGPL은 상용화에 사용해도 GPL보다는 덜 제약을 받는다길래 사용했다...
실행화면
느낀 점
Qt Designer를 사용했는데, 버튼들 위치 수정 띡띡 하고 ObjectName만 던져주고 사용하는 게 너무 편리하다.
코드 中
threads = []
for thread_idx in range(start_page, start_page + num_pages):
thread = threading.Thread(target=crawl_page, args=(i,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
위 코드처럼, 멀티스레드를 사용하긴 했는데, 그다지 적합한 사용은 아니다.
왜냐하면
파이썬 스레드는 GIL(Global Interpreter Lock) 때문에 한 번에 하나의 스레드만 실행할 수 있다.
근데
크롤링 작업은 브라우저를 제어하고 웹 페이지 DOM(Document Object Model)을 파싱 하여 데이터를 추출하는 작업인데,
이것은 CPU 자원을 많이 사용하는 작업 즉, CPU-bound 작업에 속하기 때문이다.
결론적으로 작업할 것이 많은데 GIL 때문에 병렬처리가 제한적인 멀티스레드보다는 멀티 프로세싱이 더 효율적이다~라는 말을 하고 싶었다.
그러나
무조건적으로 적합하지 않다는 건 아니고 Xpath든, selector path 등을 사용해 웹페이지 다운로드와 같은 I-O bound 작업할 때 콜백 기반 비동기처리 같은 것을 적절히 사용해야 한다는 사실이다.
'MLOps > Development' 카테고리의 다른 글
아이디어스 스크래퍼(Puppeteer, Electron) (0) | 2023.05.07 |
---|---|
쿠팡 상품 정보 수집기 v1.1.0 (0) | 2023.04.29 |
[Update] 미 증권 뉴스 스크래핑 : 클라우드타입(CloudType - Paas) (0) | 2023.04.06 |
[Fix] 미 증권 뉴스 스크랩핑 : Error 524 - A timeout occurred (0) | 2023.04.03 |
미증권 뉴스 스크랩핑(Node.js , Express, Puppeteer, Koyeb) (0) | 2023.04.03 |