BeautifulSoup 크롤링 속도 높이기

2023. 10. 10. 19:24· 코딩/파이썬
목차
  1. 모듈 설치
  2. 예제
반응형
반응형

크롤링을 할 때 보통 requests와 BeautifulSoup을 통해 크롤링을 한다.

빠르긴 하지만 몇 만개의 데이터를 처리할 때는 이마저도 느리게 보인다.

더 빠르게 처리하기 위해서 크롤링을 혼자서가 아닌 여러명에서 하면 된다.

그것이 바로 멀티 프로세싱을 이용하는 방법이다.

모듈 설치

pip install multiprocess

일단 multiprocess를 설치한 후 모듈을 import 한다

from multiprocessing import Pool, Manager

예제

freeze_support()

# 코어 수
pool = Pool(processes=5)
# 함수, 파라미터
pool.starmap(crawl_link, zip(link_list,repeat(novel_df_list)))

pool.close()

freeze_support()가 없으면 에러가 난다.
꼭 import 하자

from multiprocessing import Process, freeze_support

pool에 5개의 코어를 쥐어준다.
코어가 많을수록 속도는 빠르지만 4개까지는 드라마처럼 빨라지지만, 일정 개수 이상부터는 큰 차이가 없다고 한다.(보통 4개로 설정함)

pool.starmap(함수 이름, 파라미터)

파라미터가 하나라면 한 개만 쓰면 되고, 두개 이상일 경우 zip()으로 묶는다.

참고로 multiprocessing으로 처리할 때 일반적인 배열을 global로 사용할 수 없다.

한 마디로

link_list = ['sadf','asdf','asdf','sadf','asdf','asdf','sadf','asdf','asdf']
list_a = []
def test(link):
    global list_a
    list_a.append(link)

if __name__ == '__main__':
    freeze_support()

    pool = Pool(processes=4)
    pool.starmap(test, zip(link_list))

    pool.close()

    print(list_a)

가 불가능 하다는 소리다.
결과 값은 []. 빈 배열이 나온다.

그렇기 때문에 multiprocessing에서 배열이나 딕셔너리를 사용하고 싶다면 Manager()를 사용해야 한다.

from multiprocessing import Process, freeze_support
from multiprocessing import Pool, Manager
from itertools import repeat

link_list = ['sadf','asdf','asdf','sadf','asdf','asdf','sadf','asdf','asdf']

def test(link, list_a):
    list_a.append(link)

if __name__ == '__main__':
    m = Manager()
    list_a = m.list()

    freeze_support()

    pool = Pool(processes=4)
    pool.starmap(test, zip(link_list, repeat(list_a)))
    pool.close()

    print(list_a)

Manager를 통해 빈 리스트를 만들고, 파라미터로 넣어주면 된다.

넣어줄 때, repeat을 통해 프로세스 개수만큼 들어가도록 해준다.
(repeat을 빼면 전과 마찬가지로 빈 배열이 나온다.)

참고로 jupyter에서 안될때가 있는데(나도 안됐다), 일반 파이썬으로 돌리면 정상적으로 작동한다.
(.ipynb가 아닌 .py)

반응형

'코딩 > 파이썬' 카테고리의 다른 글

정규표현식 괄호, 특수문자 제거  (0) 2023.10.10
"파이썬 'utf-8' codec can't decode byte 0xb1 in position 1: invalid start byte"  (0) 2023.10.10
Queue(큐)  (0) 2023.10.10
Double Linked List(더블 링크드 리스트)  (1) 2023.10.10
Circle List(써클 리스트)  (0) 2023.10.10
  1. 모듈 설치
  2. 예제
'코딩/파이썬' 카테고리의 다른 글
  • 정규표현식 괄호, 특수문자 제거
  • "파이썬 'utf-8' codec can't decode byte 0xb1 in position 1: invalid start byte"
  • Queue(큐)
  • Double Linked List(더블 링크드 리스트)
샐프
샐프
샐프
무엇이든
샐프
전체
오늘
어제
  • 분류 전체보기 (55)
    • 개발일지 (1)
    • 이것저것 개발 (2)
    • 코딩 (30)
      • 디스코드 (6)
      • 파이썬 (16)
      • 기타 (8)
    • 아무거나 만들어 봄 (20)
      • 제목으로 장르 분류하기 (8)
      • 파일 빨리 옮기기 (2)
      • kBO 크롤링 (2)
      • KBO 타자 OPS 예측 경진대회 (8)
    • 알고리즘 (2)
      • 프로그래머스 (0)
      • 백준 (0)
      • [프로그래머스] 내일은 코딩테스트 with 파이썬 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 동적 페이지 크롤링
  • boxplot
  • conda activate error
  • jupyter 서버
  • 데이콘
  • ebook drm
  • pyqt5 연결
  • drm 제거
  • designer 연동
  • 파이썬
  • 파일 이름 변경
  • ebook to pdf
  • 콘다 오류
  • 파이썬 데이터프레임
  • 0x80041002
  • PyQt5
  • wsl2
  • kbo 크롤링
  • ebook pdf 추출
  • 도커
  • pyqt5-designer
  • 문자 지우기
  • yes24 ebook pdf 추출
  • ebook 뷰어
  • 셀레니움
  • yes24 ebook
  • csv 한글 깨짐
  • 동적 크롤링
  • designer 연결
  • yes24 ebook 뷰어

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
샐프
BeautifulSoup 크롤링 속도 높이기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.