Scrapy 고급 지식 요약 (4 개) - 아이템의 파이프 라인

 

항목 파이프 라인

항목 파이프 라인 호출은 스파이더 생성 항목 후에 발생합니다. 스파이더 응답을 파싱이 완료되면, 상품이 상품 파이프로 전달되어, 상품 파이프 조립체 정의 순차적으로 호출은 데이터 정제 및 저장 등의 처리의 시리즈를 완료한다.

항목 파이프 라인의 주요 목적은 다음과 같습니다 :

  • HTML 데이터를 청소합니다.

  • 검증 데이터는 검사 필드를 크롤링, 크롤 링합니다.

  • 무게 확인 및 폐기 중복.

  • 데이터베이스에 크롤링 결과를 저장합니다.

 

파이프 라인 클래스

파이프 라인은 사용자 정의 할 수 있지만, 각 클래스는 다음과 같은 방법 덕트를 구현해야합니다 :

process_item (자기, 항목, 거미)

process_item () 메소드는이 방법 부품 처리 항목 파이프 기본 정의되어 호출 이루어져야한다. 예를 들어, 우리는 데이터베이스 작업에 대한 데이터 또는 쓰기 데이터를 처리 할 수 있습니다. 그것은 해야한다 유형 항목의 값을 반환하거나 DropItem 예외를 throw합니다.

매개 변수 :

  • item는 Item 객체, 즉 상품 처리이다.

  • spider스파이더 스파이더를 생성, 즉 아이템 객체이다.

 

달성하기 위해 다른 방법이 파이프 라인처럼 또한 process_item는 () 구현해야합니다 :

1. open_spider (거미)

열 때 거미는 주로 등등 데이터베이스에 연결하고, 일부 초기화 작업을 수행하기 위해 호출됩니다. 즉, 매개 변수는 피사체가 거미를 열 수 있습니다

2. close_spider (거미)

닫을 때 거미는 주로 작업의 마감 데이터베이스 연결 자연 일부 마무리 손질을 할 호출됩니다. 스파이더 객체 거미 매개 변수는 폐쇄되어야한다

3. from_crawler (CLS, 크롤러)

@classmethod 로고 의존성 주입 방식으로 분류 방법. 인수는 개체를 통해 크롤러, 크롤러, 우리는 각각의 글로벌 구성 정보와 같은 모든 핵심 구성 요소 Scrapy을 얻을하고 파이프 라인의 인스턴스를 만들 수 있습니다. CLS 매개 변수는 클래스, 그리고 마지막으로 클래스 인스턴스로 돌아갑니다.

 

항목 파이프 라인 구성 요소를 활성화

항목 파이프 라인 어셈블리를 활성화하려면, 클래스 ITEM_PIPELINES 배열, 다음의 예에 추가해야합니다

ITEM_PIPELINES = {
     ' myproject.pipelines.Pipelineclass1 ' 300 ,
     ' myproject.pipelines.Pipelineclass2 ' : 800 , 
}

높은 값 범주에 낮은 값에서 프로젝트 : 적분 값에 할당 된 클래스를 설정하면 그들이 실행 된 순서를 결정합니다. 범위 0-1000에서 이러한 숫자의 관습 정의.

 

1. 쓰기 파일

수입 JSON의 

클래스 JsonWriterPipeline (객체) : 

    데프 open_spider (자기, 거미) : 
        self.file = 개방 ( ' items.jl ' , ' w ' ) 

    데프 close_spider (자기, 거미) : 
        self.file.close () 

    DEF process_item ( 자기, 항목, 거미) : 
        라인 = json.dumps (DICT (항목)) + " \ n " 
        self.file.write (선) 
        반환 항목

2. 예금 mysql을

가져 오기 pymysql의
 클래스 MySQLPipeline (객체) :
     DEF  __init__ (자동) :
         #은 데이터베이스에 연결 
        self.db = pymysql.connect ( 
            호스트 = ' localhost를 ' ,   #의 데이터베이스 IP 주소 
            포트 = 3306,   #의 데이터베이스 인터페이스 
            DB = ' DBNAME ' ,   #의 데이터베이스 이름 
            사용자 = ' 루트 ' ,   # 데이터베이스 사용자 이름 
            passwd를 = ' 루트 ' ,   #의 데이터베이스 암호
            = 캐릭터 세트 ' UTF8 ' ,   #의 인코딩 
            )
         # 커서 조작 얻기 위해 커서 () 메소드를 사용하여 
        self.cursor = self.db.cursor을 () 

    DEF 자체가, 아이템, 스파이더) (process_item :
         # 쓰기 삽입 SQL 문이 데이터베이스입니다 표가 
        SQL을 =   " 삽입 직원 (FIRST_NAME 상기 LAST_NAME) 값 ( '%의 S', '%의 S') INTO " % (아이템 [ ' F_Name ' ] 항목 [ ' l_name ' ])
         은 try :
             #가 실행 SQL 문 
            self.cursor.execute (SQL)
             #제출 SQL 문 
            self.db.commit ()
         제외 :
             # 오류가 발생하는 롤백 
            self.db.rollback ()
         #의 반환 항목 
        반환 항목 
        
    DEF의 close_spider (자체, 스파이더) : 
        self.db.close를 ()

3. 예금 MongoDB를

가져 오기 pymongo의
 클래스 MongodbPipeline (객체) : 

    DEF  __init__ (자동) :
         # 데이터베이스 연결 MongoDB를 설정 
        self.client = pymongo.MongoClient ( ' MongoDB를을 : // 로컬 호스트 : 27017 / ' )
         # 데이터베이스에 연결하는 데 필요한 
        self.db 클라이언트 =를 [ ' Scrapy ' ]
         #에 접속 세트 (테이블) 
        self.coll DB = ' COLLECTION_NAME ' ] 

    DEF의 process_item (자기, 항목 스파이더) 
        PostItem = 딕셔너리 (항목)   # 1 사전 항목으로 변환 할 
        self.coll.insert (postItem)  # 데이터베이스에 레코드를 삽입하려면 
        반환 항목 
        
    DEF의 close_spider (자체, 스파이더) : 
        self.client.close ()

4.from_crawler () 실시 예

클래스 MongoPipeline (객체) : 
    COLLECTION_NAME = ' XXX ' 

    데프  __init__ (자기, mongo_uri, mongo_db) : 
        self.mongo_uri = mongo_uri 
        self.mongo_db = mongo_db 

    @classmethod 
    데프 from_crawler (CLS, 크롤러) :
         리턴 CLS (
             #의 从크롤러 설정中获取配置 
            mongo_uri crawler.settings.get = ( ' MONGO_URI ' ) 
            mongo_db = crawler.settings.get ( ' MONGO_DATABASE ' ) 
        )

    데프 open_spider (자기 스파이더) 
        self.client = pymongo.MongoClient (self.mongo_uri) 
        self.db = self.client [self.mongo_db] 

    DEF close_spider (자기 스파이더) 
        self.client.close () 

    DEF process_item ( 자기, 항목 거미) 
        postItem = 딕셔너리 (항목) 
        self.db [self.collection_name]를 취소하려면 (postItem) 
        반환 항목

 

추천

출처www.cnblogs.com/fengf233/p/11363620.html