コード例 #1
0
ファイル: engine.py プロジェクト: lf0711/day07
 def __init__(self):
     self.spider = Spider()
     self.scheduler = Scheduler()
     self.pipeline = Pipeline()
     self.downloader = Downloader()
     self.spider_mid = SpiderMiddleware()  # 初始化爬虫中间件对象
     self.downloader_mid = DownloaderMiddleware()  # 初始化下载器中间件对象
コード例 #2
0
ファイル: engine.py プロジェクト: lf0711/day07
class Engine(object):
    def __init__(self):
        self.spider = Spider()
        self.scheduler = Scheduler()
        self.pipeline = Pipeline()
        self.downloader = Downloader()

    def start(self):
        """启动整个引擎,主要调用逻辑代码写在_start_engine中"""
        self._start_engine()

    def _start_engine(self):
        '''实现个业务之间对接'''
        # 爬虫模块发出初始化请求
        start_request = self.spider.start_request()
        # 把初始化请求添加给调度器
        self.scheduler.add_request(start_request)
        # 从调度器获取请求对象
        request = self.scheduler.get_request()
        # 调用下载器发送请求
        response = self.downloader.get_response(request)
        # 调用爬虫处理响应方法,处理响应,得到结果
        result = self.spider.parse(response)
        if isinstance(result, Request):
            self.scheduler.add_request(result)
        else:
            self.pipeline.process_item(result)
コード例 #3
0
ファイル: engine.py プロジェクト: zhaoduoyu/demo
class Engine():
    def __init__(self):
        self.spider = Spider()
        self.scheduler = Scheduler()
        self.downloader = Downloader()
        self.pipeline = Pipeline()

        self.spider_mid = SpiderMiddleware()
        self.downloader_mid = DownloaderMiddleware()

    def start(self):
        # 被调用执行引擎逻辑的入口函数
        self._start_engine()

    def _start_engine(self):
        # 框架运行的逻辑

        # 1. 爬虫模块发出初始请求
        start_request = self.spider.start_request()

        # 利用爬虫中间件预处理请求对象
        start_request = self.spider_mid.process_request(start_request)

        # 2. 把初始请求添加给调度器
        self.scheduler.add_request(start_request)

        # 3. 从调度器获取请求对象
        request = self.scheduler.get_request()

        # 利用下载器中间件预处理请求对象
        request = self.downloader_mid.process_request(request)

        # 4. 利用下载器发起请求
        response = self.downloader.get_response(request)

        # 利用下载器中间件预处理响应对象
        response = self.downloader_mid.process_response(response)

        # 利用爬虫中间件预处理响应对象
        response = self.spider_mid.process_response(response)

        # 5. 利用爬虫的解析响应的方法,处理响应,得到结果
        result = self.spider.parse(response)

        # 6. 判断结果对象
        if isinstance(result, Request):

            # 利用爬虫中间件预处理请求对象
            result = self.spider_mid.process_request(result)

            # 6.1 如果是请求对象,那么就再交给调度器
            self.scheduler.add_request(result)

        else:

            # 6.2 否则,就交给管道处理
            self.pipeline.process_item(result)
コード例 #4
0
ファイル: engine.py プロジェクト: lf0711/day07
class Engine(object):
    def __init__(self):
        self.spider = Spider()
        self.scheduler = Scheduler()
        self.pipeline = Pipeline()
        self.downloader = Downloader()
        self.spider_mid = SpiderMiddleware()  # 初始化爬虫中间件对象
        self.downloader_mid = DownloaderMiddleware()  # 初始化下载器中间件对象

    def start(self):
        """启动整个引擎,主要调用逻辑代码写在_start_engine中"""
        start = datetime.now()  # 获取当前时间
        logger.info('开始运行时间:%s' % start)
        self._start_engine()
        stop = datetime.now()
        logger.info('运行结束时间:%s' % stop)
        # 运行总耗时时间
        logger.info('耗时: %.2f' % (stop - start).total_seconds())

    def _start_engine(self):
        '''实现个业务之间对接'''
        # 爬虫模块发出初始化请求
        start_request = self.spider.start_request()

        # 爬虫中间件
        start_request = self.spider_mid.process_request(start_request)
        # 把初始化请求添加给调度器
        self.scheduler.add_request(start_request)
        # 从调度器获取请求对象
        request = self.scheduler.get_request()

        # 利用下载中间件预处理请求对象
        request = self.downloader_mid.process_request(request)
        # 调用下载器发送请求
        response = self.downloader.get_response(request)

        # 下载中间件预处理对象
        response = self.downloader_mid.process_response(response)
        # 调用爬虫处理响应方法,处理响应,得到结果
        result = self.spider.parse(response)
        if isinstance(result, Request):
            result = self.spider_mid.process_request(result)
            self.scheduler.add_request(result)
        else:
            self.pipeline.process_item(result)
コード例 #5
0
class Engine():
    def __init__(self):
        self.spider = Spider()
        self.scheduler = Scheduler()
        self.downloader = Downloader()
        self.pipeline = Pipeline()

        self.spider_mid = SpiderMiddleware()
        self.downloader_mid = DownloaderMiddleware()

    def start(self):
        # 被调用执行引擎逻辑的入口函数

        start = datetime.now()  # 起始时间
        logger.info("开始运行时间:%s" % start)  # 使用日志记录起始运行时间
        self._start_engine()
        stop = datetime.now()  # 结束时间
        logger.info("结束运行时间:%s" % stop)  # 使用日志记录结束运行时间
        logger.info("耗时:%.2f" % (stop - start).total_seconds())  # 使用日志记录运行耗时

    def _start_engine(self):
        # 框架运行的逻辑

        # 1. 爬虫模块发出初始请求
        start_request = self.spider.start_request()

        # 利用爬虫中间件预处理请求对象
        start_request = self.spider_mid.process_request(start_request)

        # 2. 把初始请求添加给调度器
        self.scheduler.add_request(start_request)

        # 3. 从调度器获取请求对象
        request = self.scheduler.get_request()

        # 利用下载器中间件预处理请求对象
        request = self.downloader_mid.process_request(request)

        # 4. 利用下载器发起请求
        response = self.downloader.get_response(request)

        # 利用下载器中间件预处理响应对象
        response = self.downloader_mid.process_response(response)

        # 利用爬虫中间件预处理响应对象
        response = self.spider_mid.process_response(response)

        # 5. 利用爬虫的解析响应的方法,处理响应,得到结果
        result = self.spider.parse(response)

        # 6. 判断结果对象
        if isinstance(result, Request):

            # 利用爬虫中间件预处理请求对象
            result = self.spider_mid.process_request(result)

            # 6.1 如果是请求对象,那么就再交给调度器
            self.scheduler.add_request(result)

        else:

            # 6.2 否则,就交给管道处理
            self.pipeline.process_item(result)
コード例 #6
0
 def __init__(self):
     self.spider = Spider()
     self.scheduler = Scheduler()
     self.downloader = Downloader()
     self.pipeline = Pipeline()