Esempio n. 1
0
        /// <summary>
        /// 运行
        /// </summary>
        /// <param name="args">运行参数</param>
        public void Execute(params string[] args)
        {
            try
            {
                PrintEnvironment();


                //获取系统环境变量
                var logfile = Environment.GetEnvironmentVariable("DOTNET_SPIDER_id");
                logfile = string.IsNullOrWhiteSpace(logfile) ? "dotnet-spider.log" : $"/logs/{logfile}.log";
                Environment.SetEnvironmentVariable("logfile", logfile);

                ConfigureSerialLog(logfile);



                Framework.SetMultiThread();

                var configurationBuilder = new ConfigurationBuilder();
                configurationBuilder.SetBasePath(AppDomain.CurrentDomain.BaseDirectory);
                configurationBuilder.AddEnvironmentVariables(prefix: "DOTNET_SPIDER_");
                configurationBuilder.AddCommandLine(Environment.GetCommandLineArgs(), Framework.SwitchMappings);
                var configuration = configurationBuilder.Build();

                string spiderTypeName = configuration["type"];
                if (string.IsNullOrWhiteSpace(spiderTypeName))
                {
                    Log.Logger.Error("未指定需要执行的爬虫类型");
                }

                var name      = configuration["name"];
                var id        = configuration["id"] ?? Guid.NewGuid().ToString("N");
                var arguments = configuration["args"]?.Split(' ');



                var spiderTypes = DetectSpiders();

                if (spiderTypes == null || spiderTypes.Count == 0)
                {
                    return;
                }

                var spiderType = spiderTypes.FirstOrDefault(x =>
                                                            x.UnderlyingSystemType.ToString().ToLower() == spiderTypeName.ToLower());
                if (spiderType == null)
                {
                    Log.Logger.Error($"未找到爬虫: {spiderTypeName}", 0, ConsoleColor.DarkYellow);
                    return;
                }

                var builder = new SpiderHostBuilder();
                ConfigureService(configuration, builder);

                builder.Register(spiderType);
                var provider = builder.Build();
                var instance = provider.Create(spiderType);
                if (instance != null)
                {
                    instance.Name = name;
                    instance.Id   = id;
                    instance.RunAsync(arguments).ConfigureAwait(true).GetAwaiter().GetResult();
                }
                else
                {
                    Log.Logger.Error("创建爬虫对象失败", 0, ConsoleColor.DarkYellow);
                }
            }
            catch (Exception e)
            {
                Log.Logger.Error($"执行失败: {e}");
            }
        }
Esempio n. 2
0
 protected abstract void ConfigureService(IConfiguration configuration, SpiderHostBuilder builder);