python 은 scrapy 파충류 가 매일 정시 에 데 이 터 를 캡 처 하 는 예제 코드 를 실현 합 니 다.
1.1.필요 한 배경.
다음 세 단 계 를 통 해 파충류 가 자동 으로 하루 걸 러 데 이 터 를 잡 을 수 있 도록 보장 합 니 다.
매일 새벽 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 시간 으로 제어 합 니 다).파충류 의 운행 상 태 를 모니터링 합 니 다(파충류 의 상 태 를 표시 하 는 정 보 를 사용 해 야 합 니 다:실행 또는 정지).
(3)파충류 가 시작 되 기 전에 준비 작업(계속 기어 오 르 는 파일 을 삭제 하고 파충류 가 실행 되 지 않도록 합 니 다)을 하고 파충류 가 데 이 터 를 기어 오 르 기 시작 합 니 다.파충류 가 정상적으로 끝 난 후에 스 크 립 트 를 종료 하고 당일 의 기어 오 르 기 작업 을 완성 합 니 다.
4.준비 작업.
4.1.파충류 의 운행 상 태 를 표시 한다.
파일 이 존재 하 는 지 여 부 를 판단 하 는 방식 으로 파충류 가 실행 상태 에 있 는 지 여 부 를 판단 합 니 다.
# 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 가 정 해진 시간 에 캡 처 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 를 많이 응원 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.