0x00
웹 크롤러(웹 스파이더, 웹 봇이라고도 하며, FOAF 커뮤니티에서는 웹 체이서라고 더 흔히 부릅니다)는 특정 규칙에 따라 월드 와이드 웹에 관한 정보를 자동으로 스크래핑하는 프로그램이나 스크립트입니다. 덜 흔히 사용되는 다른 이름으로는 개미, 자동 인덱싱, 시뮬레이터, 벌레 등이 있습니다.
0x01
간단히 말해, 크롤러는 자체 규칙에 따라 데이터를 수집하고, 수집된 데이터를 분석한 뒤 자신에게 유용한 데이터를 얻습니다.
0x02
웹 크롤러 최적화는 두 단계로 나눌 수 있습니다:
1: 데이터 스크래핑 시 최적화;
2: 잡기 결과 처리 최적화;
오늘은 스크래핑 과정에서의 최적화에 대해 이야기하려고 합니다!
0x03
크롤링 과정 최적화에 대해 몇 가지 점을 요약했습니다:
1: 물리적 주소로 최적화할 수 있습니다. 예를 들어, 대상 리소스 서버는 상하이의 텐센트 클라우드 호스트입니다. 우리는 같은 지역 내 서버를 선택하려고 합니다. 즉, 상하이 지역 서버는 선택하지 말고, 같은 IDC 컴퓨터실의 서버를 선택하려고 합니다. 이 리소스 웹사이트가 텐센트 클라우드 서버임을 알고 있으며, 크롤러를 텐센트 클라우드 서버에 올리려고 합니다. 알리바바 클라우드 서버에는 두려고 합니다!
2: 안정적이고 빠른 네트워크를 선택하세요. 일반적으로 크롤러는 네트워크 품질에 높은 요구 조건이 있습니다. 홈 네트워크를 사용하지 않도록 하고, 회사 네트워크를 선택하거나 데이터를 캡처할 서버를 구매하세요.
3: 더 효율적인 크롤러 언어를 선택하세요. 파이썬이 크롤러에 더 뛰어나다고 들었지만 사용해본 적은 없고, 오늘은 주로 .net 언어로 설명할 예정입니다.
0x04
급히 구매하는 경우, 빠른 데이터 획득 요구가 높으며, 시간 문제로 설명할 수 있습니다. 데이터를 조기 확보하고 획득 확률을 높이는 데 도움이 됩니다. 다음은 제가 콘솔로 작성한 데모입니다. 아래 그림과 같이 이 웹사이트의 데이터를 캡처하는 테스트입니다:
(시간이 짧을수록 더 빠릅니다)
위 데이터 순위:1: 네이티브 최적화된 코드, 2: 네이티브 코드, 3: 서드파티 플러그인 DLL(패키지)
0x05
왜 서드파티 플러그인(패키지)이 가장 오래 걸릴까요? 서드파티 플러그인은 실제로 많은 수의 네이티브 코드 캡슐화, 많은 논리적 판단, 그리고 비교적 다재다능하여 느린 크롤링 속도를 초래할 수 있습니다.
다음은 기본 코드입니다:
네이티브 코드는 바로 위 몇 줄에 있습니다.평균 시간은 여전히 184밀리초입니다,코드가 단순할수록 최적화가 더 어렵습니다위 코드를 어떻게 최적화해서 평균 99밀리초 시간을 달성할 수 있다고 생각하시나요?속도 차이가 두 배로 커졌어!
0x06
대상 리소스 서버가 gzip 압축을 지원한다면, 웹사이트에 접속하고 브라우저가 웹사이트를 요청할 때 요청 헤더는 다음과 같은 매개변수를 갖게 됩니다:
응답 헤더 매개변수:
"수락-인코딩" 소개: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
쉽게 말하자면:
고객은 다음과 같이 말합니다:저는 "gzip, deflate, sdch, br" 압축 알고리즘을 지원하며, 데이터를 반환할 때 원하는 것을 사용할 수 있습니다.
서버가 말했다:저는 gzip 압축 알고리즘을 지원하니, gzip 알고리즘을 사용해 데이터를 압축해 드리겠습니다
고객은 다음과 같이 말합니다:그럼 받은 데이터를 gzip 알고리즘으로 복호화하겠습니다
gzip 알고리즘을 사용하며, 전송된 데이터를 압축하고 전송되는 내용을 크게 줄여 요청 효율이 향상되므로, 최적화된 코드는 다음과 같습니다:
비록 작은 디테일이지만 효율성이 두 배로 늘었다고 할 수 있습니다! 이틀 동안 수집한 데이터와 같고, 이제는 하루 만에 수집할 수 있으며, 이 글은 기어 다니는 것을 배우는 친구들을 위한 것입니다.
참고: gzip 압축 알고리즘은 프로그래밍 언어와는 전혀 관련이 없습니다!
마지막으로 소스 코드를 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|