웹 스크래핑 프로세스가 너무 느려서 문제가 생긴 적이 있습니까? 당신은 스크랩할 웹사이트가 많나요? 그래, 넌 혼자가 아니야.
우리 모두는 데이터 과학 과정을 위해 데이터 세트가 필요합니다. 하지만 일이 잘 풀릴 리 없다. 많은 데이터 세트가 깨끗한 형식이 아닙니다. 그리고 어떤 경우에는, 우리는 인터넷에서 그것을 추출할 필요가 있습니다.
웹 스크래핑은 데이터 집합을 추출하는 완벽한 방법입니다. 스프레드시트에 수동으로 입력하는 대신 프로그래밍 언어를 사용하여 데이터 집합을 자동으로 추출할 수 있습니다.
하지만 문제가 있습니다. 스크래핑 과정이 상당히 느립니다. 만약 우리가 그것을 최적화하지 않는다면, 많은 웹사이트를 스크래핑하는데 몇 시간에서 며칠이 걸릴 수 있다. 그래서 우리는 무엇을 할 수 있을까요? 이 글에서는 방법을 보여 줍니다.
이 글에서는 멀티스레딩을 이용하여 파이썬에서 웹 스크래핑 속도를 높이는 방법을 알려드리겠습니다. 우리는 Concurrent라는 라이브러리를 사용할 것입니다.그 과정을 하는 것에 대한 미래.
이 방법을 사용하면 데이터셋 크기에 따라 웹 스크래핑 프로세스를 최대 10배까지 늘릴 수 있습니다.
작은 데이터 세트를 사용하면 이점을 보지 못할 수도 있습니다. 하지만 대규모 데이터셋에 사용하면 이점이 있습니다. 야단법석 떨지 말고 시작합시다!
멀티스레딩이란 무엇입니까?
멀티스레딩을 이해하기 위해서는 이 용어들을 이해해야 합니다. 그 용어들은 비동기적이고 스레드이다.
비동기(async)는 많은 작업을 동시에 실행할 수 있는 방법이다. 비동기식의 반대는 작업을 순차적으로 실행해야 하는 동기식입니다.
작업을 비동기 방식으로 실행할 경우 스레드가 복구됩니다. 스레드는 운영 체제에서 가장 작은 부분입니다.
이걸로 계산 과정을 할 수 있어요. 컴퓨터는 둘 이상의 스레드로 구성될 수 있습니다. 따라서 멀티스레딩이 도입됩니다.
동시.퓨처 라이브러리를 사용하면 비동기식으로 작업을 실행할 수 있습니다. 그러므로 당신은 그 어느 때보다도 빠르게 그 일을 해결할 수 있습니다.
스크래핑 공정에서 우리는 많은 링크에 기능을 적용합니다. 우리는 이 데이터가 서로 독립적이라고 가정할 수 있습니다. 따라서 우리는 데이터를 청크로 나눌 수 있습니다. 거기서부터, 이 청크들은 사용 가능한 모든 스레드에 들어갈 것이다.
실행
이제 멀티스레딩의 개념을 알게 되었습니다. 이제 구현에 대해 살펴보겠습니다.
출처
이 기사에서는 FBRef.com이라는 웹사이트에서 데이터를 긁어내려고 할 것입니다. FBRef는 축구에 관한 통계를 집계하는 웹사이트이다.
이 웹사이트는 프리미어 리그에서 메이저 리그 사커에 이르는 많은 리그의 데이터를 포함하고 있다. 그 외에도, 우리는 팀이나 선수 수준의 데이터를 잡을 수 있습니다.
문제
문제의 경우 플레이어의 정보와 통계로 리디렉션되는 링크와 함께 플레이어 이름과 같은 데이터를 추출하려고 합니다.
초기 코드
처음에는 다음과 같은 코드가 있습니다.
그 코드에서, 우리는 플레이어의 이름과 링크를 추출하기 위해 루핑을 사용합니다. 그것을 사용하는 이유는 선수들의 이름을 모두 모은 페이지가 한 장도 없기 때문이다.
거기서 문제가 발생해요. 우리는 데이터가 들어 있는 페이지를 많이 열어야 합니다. 한 번에 한 페이지씩 펼치기 때문에 진행이 굉장히 느려집니다. 이 코드를 사용하면 작업이 15분 29초 만에 완료됩니다.
이 문제에서 동시 발생.미래 도서관이 우리를 도우러 온다.
멀티스레딩 파이프라인
이전 부분을 보면 스크래핑 과정이 상당히 느리다는 것을 알 수 있습니다. 프로세스를 가속화하기 위해 멀티스레딩 개념을 사용하여 문제를 해결할 수 있습니다.
우리는 동시대의 개체를 사용할 것입니다.ThreadPoolExecutor라는 미래 라이브러리.
멀티스레딩을 적용하기 위한 Blueprint는 다음과 같습니다.
우리가 구현해야 할 부분이 세 가지 있습니다. 우선 도서관을 수입해야 합니다. 둘째, 데이터를 스크래핑하는 기능을 구현합니다. 마지막으로 멀티스레딩을 실행합니다.
동시 실행 코드가 있는 코드입니다.선물
그러면 어떻게 초기 기능에 멀티스레딩을 적용할 수 있을까요? 코드는 다음과 같습니다.
이제 암호를 알아냈군 비슷하죠? 이전 코드를 함수로 래핑하고 함수를 데이터 청크로 매핑하기 위해 ThreadPoolExecutor 개체를 추가합니다. 전에도 말했듯이, 스레드는 스크래핑 공정을 가속화할 수 있습니다. 하지만 얼마나 빠를까요?
제 경우에는 코드가 72초 만에 작업을 끝냈습니다. 그것은 이전의 암호보다 거의 12배나 빠른 속도입니다! 상상해 보세요. 10만 개 이상의 링크가 있으면 많은 시간을 절약할 수 있습니다.
나는 그 정도의 링크로 웹사이트를 긁는 사례가 또 생겼다. 처음에 작업을 완료하는 데 걸리는 예상 시간은 약 65시간입니다.
멀티스레딩으로, 나는 그 일을 6시간 만에 끝낼 수 있어!
내가 얼마나 시간을 절약했는지 봐! 그 시간을 아껴서, 우리는 우리가 좋아하는 모든 일을 할 수 있습니다.
최종 비고
잘 했다! 이제 파이썬에서 웹 스크래핑 프로세스를 가속화하기 위해 멀티스레딩을 구현하는 방법을 배웠습니다. 그것을 이용하면 어떤 작업도 10배까지 가속할 수 있습니다.
이 컨셉으로 웹 스크래핑 과정에서 당신의 문제가 해결되었으면 좋겠습니다. 따라서, 여러분은 절약된 시간으로 어떤 일이든 해결하는 데 집중할 수 있습니다. 아니면 네가 가장 좋아하는 TV 시리즈를 볼 때 그것을 사용할 수도 있어, 하하.
전체 노트북을 원하시면 이 링크를 참고하시면 됩니다.
제 글을 읽어주셔서 감사합니다!
'프로그래밍' 카테고리의 다른 글
C++를 사용하여 나만의 메타버스를 만드는 방법 (0) | 2022.01.12 |
---|---|
OSMnx: OpenStreetMap에서 데이터를 가장 빠르게 가져오는 방법 (0) | 2022.01.12 |
Android 일반 TableView - 데이터 표시를 위한 전체 사용자 지정 가능 라이브러리 (0) | 2022.01.12 |
이진 검색 - 더미용 (0) | 2022.01.11 |
주간 요약 #56 (0) | 2022.01.04 |
댓글