python 은 scrapy 파충류 가 매일 정시 에 데 이 터 를 캡 처 하 는 예제 코드 를 실현 합 니 다.

1.머리말.
1.1.필요 한 배경.
  •  매일 같은 상품 의 데 이 터 를 캡 처 하여 트 렌 드 분석 에 사용 합 니 다
  • 4.567917.매일 한 부 를 잡 아야 하고 한 부의 데이터 만 잡 아야 한다4.567917.그러나 전체 데 이 터 를 추출 하 는 과정 은 시간 적 으로 확실 하지 않다.현지 네트워크,대리 속도,캡 처 데이터 의 양 과 관련 이 있 고 일반적인 상황 에서 20 시간 정도 이 며 극히 적은 상황 에서 24 시간 을 초과 할 수 있다1.2 기능 실현.
    다음 세 단 계 를 통 해 파충류 가 자동 으로 하루 걸 러 데 이 터 를 잡 을 수 있 도록 보장 합 니 다.
    매일 새벽 00:01 감시 스 크 립 트 를 시작 하여 파충류 의 운행 상 태 를 감시 하고 파충류 가 빈 상태 에 들 어가 면 파충류 가 작 동 합 니 다.
    파충류 가 실행 되면 스 크 립 트 를 자동 으로 종료 하고 오늘 의 임 무 를 끝 냅 니 다.
    스 크 립 트 가 시작 시간 이 24 시간 이 넘 으 면 스 크 립 트 를 자동 으로 종료 하고 다음 날 모니터링 스 크 립 트 가 시작 되 기 를 기다 리 며 이 세 단 계 를 반복 합 니 다.
    2.환경.
    python 3.6.1
    시스템:win 7
    IDE:pycharm
    스 크 래 피 설치
    3.디자인 사고.
    3.1.전제:
    현재 파충 류 는 scrapy 모듈 에서 자체 적 으로 가 져 온 cmdline.execute 를 통 해 작 동 됩 니 다.
    
    from scrapy import cmdline
    cmdline.execute('scrapy crawl mySpider'.split())
    3.2.스 크 립 트 를 scrapy 파충류 의 외부 로 자동 으로 실행 합 니 다.
    (1)매일 새벽 00:01 에 스 크 립 트 를 시작 합 니 다(스 크 립 트 의 생존 시간 을 24 시간 으로 제어 합 니 다).파충류 의 운행 상 태 를 모니터링 합 니 다(파충류 의 상 태 를 표시 하 는 정 보 를 사용 해 야 합 니 다:실행 또는 정지).
  • 파충류 가 운행 상태(전날 데 이 터 를 얻 는 것 이 끝나 지 않 았 음)에 있 으 면 제(2)단계 에 들어간다
  • 만약 에 파충류 가 비 운행 상태(전날 의 기어 오 르 기 임무 가 완성 되 었 고 오늘 의 시작 도 하지 않 았 다)에 있 으 면 제(3)단계 에 들어간다
  • (2)스 크 립 트 가 대기 단계 에 들 어가 10 분 간격 으로 파충류 의 운행 상 태 를 확인 합 니 다.예 를 들 어(1).그러나 스 크 립 트 의 대기 시간 이 24 시간 을 넘 으 면 스 크 립 트 를 자동 으로 종료 합 니 다.다음 날 모니터링 스 크 립 트 가 실행 되 기 시 작 했 기 때문에 작업 을 대신 합 니 다.
    (3)파충류 가 시작 되 기 전에 준비 작업(계속 기어 오 르 는 파일 을 삭제 하고 파충류 가 실행 되 지 않도록 합 니 다)을 하고 파충류 가 데 이 터 를 기어 오 르 기 시작 합 니 다.파충류 가 정상적으로 끝 난 후에 스 크 립 트 를 종료 하고 당일 의 기어 오 르 기 작업 을 완성 합 니 다.
    4.준비 작업.
    4.1.파충류 의 운행 상 태 를 표시 한다.
    파일 이 존재 하 는 지 여 부 를 판단 하 는 방식 으로 파충류 가 실행 상태 에 있 는 지 여 부 를 판단 합 니 다.
  • 파충류 가 시 작 될 때 isRunning.txt 파일 을 만 듭 니 다
  • 파충류 가 끝 날 때 이 isRunning.txt 파일 을 삭제 합 니 다
  • 그러면 isRunning.txt 가 존재 하 는 것 은 파충류 가 운행 하고 있다 는 것 을 의미한다.파일 이 존재 하지 않 는 다 는 것 은 파충류 가 운행 하지 않 는 다 는 것 을 의미한다.
    
    #   pipelines.py
    #      
    checkFile = "isRunning.txt"
    class myPipeline:
      def open_spider(self, spider):
        self.client = MongoClient('localhost:27017') #   Mongodb
        self.db = self.client['mydata']        #          mydata
        f = open(checkFile, "w")     #       ,        
        f.close()
    
    #   pipelines.py
    #        
    checkFile = "isRunning.txt"
    class myPipeline:
      def close_spider(self, spider):
        self.client.close()
        isFileExsit = os.path.isfile(checkFile)
        if isFileExsit:
          os.remove(checkFile)
    4.2.파충 류 는 계속 기어 오 르 는 것 을 지원 하고 수시로 멈 출 수 있 으 며 테스트 하기에 편리 하 다.
    
    #  scrapy     start.py  ,      
    from scrapy import cmdline
    #         ,           crawls/storeMyRequest   ,    
    cmdline.execute('scrapy crawl mySpider -s JOBDIR=crawls/storeMyRequest'.split())
    # Note:      , ctrl+c     ,     ,              ,       ctrl+c
    这里写图片描述
    4.3.Log 는 매일 날짜 에 따라 이름 을 짓 고 보기 편 하 며 디 버 깅 하기 편 합 니 다.
    로그 레벨 설정:
    
    #   mySpider.py
    class mySpider(CrawlSpider):
      name = "mySpider"
      allowed_domains = ['http://photo.poco.cn/']
      custom_settings = {
        'LOG_LEVEL':'INFO', #   Log   ,        
        # ......       custom_setting                  
      }
    로그 파일 이름
    
    #   settings.py
    import datetime
    BOT_NAME = 'mySpider'
    ROBOTSTXT_OBEY = False
    startDate = datetime.datetime.now().strftime('%Y%m%d')
    LOG_FILE=f"mySpiderlog{startDate}.txt"
    4.4.데 이 터 를 날짜 에 따라 다른 표(mongodb 의 집합)에 저장 합 니 다.
    
    #   pipelines.py
    import datetime
    GALANCE=f'galance{datetime.datetime.now().strftime("%Y%m%d")}' #   
    
    class myPipeline:
      def open_spider(self, spider):
        self.client = MongoClient('localhost:27017') #   Mongodb
        self.db = self.client['mydata']        #          mydata
    
    self.db[GALANCE].insert(dict(item))
    这里写图片描述
    4.5.일괄 처리 파일 을 작성 하여 파충 류 를 시작 합 니 다.
    
    #   run.bat
    cd /d F:/newClawer20170831/mySpider
    call python main.py
    pause
    这里写图片描述
    5.구현 코드
    5.1.python 스 크 립 트 작성
    
    #   timerStartDaily.py
    from scrapy import cmdline
    import datetime
    import time
    import shutil
    import os
    
    recoderDir = r"crawls"  #                 ,         
    checkFile = "isRunning.txt" #           
    
    startTime = datetime.datetime.now()
    print(f"startTime = {startTime}")
    
    i = 0
    miniter = 0
    while True:
      isRunning = os.path.isfile(checkFile)
      if not isRunning:            #       ,      
        #              ,  JOBDIR = crawls
        isExsit = os.path.isdir(recoderDir) #   JOBDIR  crawls    
        print(f"mySpider not running, ready to start. isExsit:{isExsit}")
        if isExsit:
          removeRes = shutil.rmtree(recoderDir) #       crawls        
          print(f"At time:{datetime.datetime.now()}, delete res:{removeRes}")
        else:
          print(f"At time:{datetime.datetime.now()}, Dir:{recoderDir} is not exsit.")
        time.sleep(20)
        clawerTime = datetime.datetime.now()
        waitTime = clawerTime - startTime
        print(f"At time:{clawerTime}, start clawer: mySpider !!!, waitTime:{waitTime}")
        cmdline.execute('scrapy crawl mySpider -s JOBDIR=crawls/storeMyRequest'.split())
        break #      ,    
      else:
        print(f"At time:{datetime.datetime.now()}, mySpider is running, sleep to wait.")
      i += 1
      time.sleep(600)    #  10      
      miniter += 10
      if miniter >= 1440:  #    24  ,        
        break
    5.2.bat 일괄 처리 파일 작성
    
    #   runTimerRunDaily.bat
    cd /d F:/newClawer20170831/mySpider
    call python timerStartDaily.py
    pause
    6.배치.
    6.1 계획 작업 추가.
    아래 의 이 블 로그 배치 windows 계획 작업 을 참고 하 십시오.
    https://www.jb51.net/article/204879.htm
    windows 계획 작업 에 대한 상세 한 설명 은 다음 과 같다.
    https://technet.microsoft.com/zh-cn/library/cc722178.aspx
    6.2 주의사항.
    (1)계획 작업 을 추가 할 때 아래 그림 과 같이 선택(사용자 가 로그 인 할 때 만 실행)해 야 아래 cmd 작업 인터페이스 가 팝 업 되 어 관찰 과 디 버 깅 이 편리 합 니 다.
    这里写图片描述  
    这里写图片描述
    (2)파충류 가 오래 실행 되 기 때문에 기본 설정 에 따라 새벽 에 인 스 턴 스 를 실행 할 때 지난번 시작 이 끝나 지 않 아 이번 시작 에 실패 할 수 있 으 므 로 기본 설정 을 변경 해 야 합 니 다.(이 작업 이 실 행 된 경우:새 인 스 턴 스 를 병행 실행 합 니 다.보호 체 제 는 모든 시작 스 크 립 트 가 24 시간 을 기다 리 면 자동 으로 종료 되 며 중복 시작 되 지 않도록 하 는 것 입 니 다).
    这里写图片描述
    (3)속전 을 지원 하려 면 ctrl+c 를 한 번 누 르 면 파충류 의 운행 을 중단 할 수 있 습 니 다.파충 류 를 중지 할 때 파충 류 는 뒷수습 을 해 야 하기 때문에 여러 번 ctrl+c 를 눌 러 파충 류 를 멈 추 면 파충 류 는 뒷수습 을 하지 못 해 계속 기어 오 르 지 못 할 것 이다.6.3.효과 전시.
    정상 실행 완료:
    这里写图片描述
    실행 중:
    这里写图片描述
    python 이 scrapy 파충류 가 매일 정 해진 시간 에 데 이 터 를 캡 처 하 는 예제 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python scrapy 가 정 해진 시간 에 캡 처 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 를 많이 응원 해 주세요!

    좋은 웹페이지 즐겨찾기