>  기사  >  백엔드 개발  >  Scrapy 기본 아키텍처 탐색 및 소스 코드 분석

Scrapy 기본 아키텍처 탐색 및 소스 코드 분석

WBOY
WBOY원래의
2023-06-22 19:58:381103검색

Scrapy 기본 아키텍처 탐색 및 소스 코드 분석

Scrapy는 Python을 기반으로 한 효율적인 웹 크롤러 프레임워크로, 웹 페이지에서 데이터를 빠르고 쉽게 추출할 수 있으며 다양한 데이터 저장 및 내보내기 형식을 지원합니다. 매니아와 개발자가 선호하는 프레임워크입니다. Scrapy는 기본 구현에서 비동기 I/O 모델과 미들웨어 메커니즘을 사용하여 더욱 효율적이고 확장 가능합니다. 이 기사에서는 기본 아키텍처와 소스 코드 분석을 통해 Scrapy 구현을 살펴보겠습니다.

1. Scrapy의 기본 아키텍처

Scrapy의 기본 아키텍처는 주로 엔진, 스케줄러, 다운로더, 스파이더 및 파이프라인의 5개 모듈로 나뉩니다. 이들은 Scrapy에서 각자의 임무를 수행하고 함께 협력하여 전체 크롤링 프로세스를 원활하고 효율적으로 만듭니다.

  1. Engine

Scrapy의 엔진은 전체 크롤러 프레임워크의 핵심 역할을 하며 다양한 모듈 간의 상호 작용을 조정하고 각 모듈 간의 이벤트 및 신호를 처리하는 역할을 담당합니다. 엔진이 크롤러 시작 신호를 받으면 스케줄러에서 크롤링할 요청 개체를 얻은 다음 다운로드를 위해 개체를 다운로더에 보냅니다. 다운로드가 완료된 후 다운로더는 반환된 응답 개체를 엔진에 보냅니다. 엔진 Response 개체는 먼저 분석을 위해 Spider로 전달되고 Spider가 반환한 결과를 기반으로 새로운 Request 개체가 생성된 다음 새 Request 개체가 스케줄러로 전송됩니다. 이 프로세스는 스케줄러 대기열이 비워지고 크롤러가 종료되지 않을 때까지 루프에서 실행됩니다.

2. 스케줄러(Scheduler)

스케줄러는 크롤링을 기다리는 모든 요청 개체를 저장하고 관리하는 데 사용되며 요청 순서를 정렬하는 역할을 합니다. 요청 객체의 중복을 제거하고 우선순위가 낮은 요청을 제거합니다. 엔진이 크롤링할 다음 요청 개체를 가져와야 하는 경우 이를 얻기 위해 스케줄러의 메서드를 호출합니다. 요청 개체가 다운로드될 때마다 다운로더는 반환된 응답 개체와 해당 요청 개체를 스케줄러에 전달하고 스케줄러는 이를 요청 대기열에 저장합니다.

3. 다운로더

다운로더는 주로 엔진이 전달한 Request 객체를 Response 객체로 변환하여 엔진에 반환하는 데 사용됩니다. 다운로더는 HTTP 또는 HTTPS 요청을 전송하여 지정된 URL 주소에서 해당 웹 페이지 콘텐츠를 얻습니다. 다운로더는 일부 다운로드 미들웨어도 제공하며, 다운로드 프로세스 중에 프록시, UA 식별, 쿠키 처리 등과 같은 일부 맞춤형 처리를 추가할 수 있습니다.

4. 스파이더

크롤러 모듈은 다운로드한 웹 페이지 콘텐츠를 구문 분석하고, 구문 분석된 결과를 항목 개체로 캡슐화한 다음 항목 개체를 엔진에 반환하는 역할을 주로 담당합니다. 크롤러 모듈을 사용하려면 일반적으로 사용자 정의 크롤러 클래스를 작성하고 페이지 구문 분석, 항목 개체 캡슐화 및 요청 개체 생성을 위한 일부 메서드를 다시 작성해야 합니다.

5. Pipeline

파이프라인 모듈은 데이터 정리, 중복 제거, 데이터베이스 또는 파일 저장 등과 같이 Spider가 반환한 항목 개체에 대한 일련의 처리를 수행하는 데 사용됩니다. Scrapy에서는 여러 파이프라인 클래스를 작성하고 우선순위에 따라 파이프라인 체인을 형성할 수 있습니다. Spider가 Item 개체를 반환하면 이러한 파이프라인이 순서대로 처리됩니다.

2. Scrapy 소스 코드 분석

  1. Spider 클래스

Spider 클래스는 모든 사용자 정의 크롤러 클래스의 기본 클래스이며 크롤링 프로세스의 주요 구현 방법을 포함합니다.

먼저 이름, allowed_domains, start_urls 등과 같은 크롤러 클래스의 일부 속성을 정의해야 합니다. 이러한 속성은 크롤러 이름, 크롤링이 허용되는 도메인 이름, 크롤링이 시작되는 URL 주소를 지정하는 데 사용됩니다.

start_requests() 메서드를 재정의하면 첫 번째 요청 배치를 생성하고 크롤링을 위해 엔진에 전달할 수 있습니다.

다음으로, 데이터 추출, 새 요청 객체 생성 등을 포함하여 다운로드한 웹 페이지 콘텐츠를 구문 분석하는 데 주로 사용되는 구문 분석() 메서드를 정의해야 합니다. 엔진은 구문 분석() 메소드를 호출합니다. 이 메소드에서는 웹 페이지가 단계별로 구문 분석되고 마지막으로 Item 객체 또는 새 Request 객체가 반환됩니다.

  1. Item 클래스

Scrapy에서 Item 클래스는 웹 페이지에서 추출된 데이터를 캡슐화하는 데 사용됩니다. 실제로는 사전 개체입니다. Item 객체에는 다양한 형태의 데이터 필드를 제공할 수 있으며, 크롤러에서는 데이터 정리, 데이터 매핑 등 간단한 데이터 처리 로직을 구현할 수 있습니다. Item 개체는 결국 엔진으로 반환되고 파이프라인에 의해 차례로 처리됩니다.

  1. Settings 모듈

Settings 모듈은 크롤러 이름, 요청 지연, 동시성 수, 다운로드 시간 초과 등을 포함한 Scrapy 구성 정보를 설정하는 데 사용됩니다. 설정 모듈에서 옵션을 수정하여 Scrapy 실행 방식을 변경할 수 있습니다. 크롤러 코드에서 설정 모듈은 크롤러 클래스의 설정 속성을 통해 액세스할 수 있습니다. 설정 모듈의 모든 옵션은 사전 형식으로 저장됩니다. 코드의 설정 모듈에서 옵션 값을 직접 수정하거나 파일에서 구성 정보를 읽을 수 있습니다.

  1. 다운로더 미들웨어(다운로드 미들웨어)

Scrapy의 다운로드 미들웨어는 다운로더가 시작한 요청과 수신된 응답을 가로챌 수 있으며 요청 또는 응답을 수정하고 에이전트, UA 식별자, 쿠키 등을 추가할 수 있습니다. Scrapy는 우선순위에 따라 순차적으로 실행될 수 있는 여러 미들웨어를 지원합니다. 미들웨어는 process_request(), process_response() 또는 process_Exception() 메서드를 재정의하여 가로채고 처리합니다.

  1. Spider Middleware(스파이더 미들웨어)

Spider 미들웨어는 Spider의 입력과 출력을 가로채는 데 사용됩니다. 요청을 가로채는 Downloader Middleware와 응답을 가로채는 Spider Middleware의 두 부분으로 구성됩니다. 미들웨어는 process_spider_input() 및 process_spider_output() 메서드를 재정의하여 가로채고 처리합니다.

Scrapy 프레임워크는 매우 강력하며 다양한 웹사이트에 적용할 수 있으며 풍부한 기능과 확장된 인터페이스를 제공하며 대규모의 효율적이고 안정적인 웹 데이터 크롤링에 매우 적합합니다. 그러나 동시에 Scrapy에는 JavaScript 렌더링 웹 사이트 크롤링에 대한 지원 부족, AJAX 실시간 요청에 대한 지원 부족 등 자체적인 몇 가지 단점도 있습니다. 이러한 단점은 함께 작동하려면 다른 도구와 결합해야 합니다.

위 내용은 Scrapy 기본 아키텍처 탐색 및 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.