/// <summary>
    /// 具体数据类型转换为存储的String字符串
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static string ObjectValue2TableString(object value, List <char> arraySplitFormat)
    {
        string res = "";

        if (value == null)
        {
            return(res);
        }

        Type t = value.GetType();

        if (t.IsArray)
        {
            //  PropertyInfo pL= t.GetProperty("Length");
            //int length= (int) pL.GetValue(value, null);
            //  MethodInfo mth= t.GetMethod("GetValue", new Type[] { typeof(int) });
            //  for (int i = 0; i < length; i++)
            //  {
            //      object v = mth.Invoke(value, new object[] { i });
            //      res += SingleData2String(v);
            //      if (i < length - 1)
            //          res += "|";
            //  }
            res = ParseTool.ArrayObject2String(value, arraySplitFormat.ToArray());
        }
        else
        {
            res = SingleData2String(value);
        }

        return(res);
    }
Beispiel #2
0
    public void PaseArray1()
    {
        {
            string arrayStringContent = "mm#123,haha|papa,haha|ko#888";
            char[] arraySplitFormat   = new char[] { ',', '#' };

            Array array = ParseTool.String2Array(FieldType.StringArray, arrayStringContent, arraySplitFormat);
            Debug.Assert(array != null);
            Debug.Log(JsonUtils.ToJson(array));

            string res = ParseTool.ArrayObject2String(array, arraySplitFormat);
            Debug.Log(res);
            Debug.Assert(res == arrayStringContent);
        }
        {
            string arrayStringContent = "NULl";
            char[] arraySplitFormat   = new char[] { ',', '#' };

            Array array = ParseTool.String2Array(FieldType.StringArray, arrayStringContent, arraySplitFormat);
            Debug.Assert(array == null);
            Debug.Log(JsonUtils.ToJson(array));

            string res = ParseTool.ArrayObject2String(array, arraySplitFormat);
            Debug.Log(res);
            Debug.Assert(res == arrayStringContent.ToLower());
        }
    }
Beispiel #3
0
    public string GetString(string key)
    {
        try
        {
            if (this.ContainsKey(key))
            {
                //String 读取null 的改进,兼容旧代码
#if Compatibility
                return(this[key]);
#else
                return(ParseTool.GetString(this[key]));
#endif
            }

            if (data.m_defaultValue.ContainsKey(key))
            {
#if Compatibility
                return(data.m_defaultValue[key]);
#else
                return(ParseTool.GetString(data.m_defaultValue[key]));
#endif
            }
        }
        catch (Exception e)
        {
            throw new Exception("SingleData GetString Error TableName is :->" + data.m_tableName + "<- key->" + key + "<-  singleDataName : ->" + m_SingleDataKey + "<- \n" + e.ToString());
        }

        throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataKey + "<-");// throw
    }
    public int[] GetIntArray(string key)
    {
        string content = null;

        try
        {
            if (this.ContainsKey(key))
            {
                content = this[key];
                return(ParseTool.String2IntArray(content));
            }

            if (data.m_defaultValue.ContainsKey(key))
            {
                content = data.m_defaultValue[key];
                return(ParseTool.String2IntArray(content));
            }
        }
        catch (Exception e)
        {
            throw new Exception("SingleData GetIntArray Error TableName is :->" + data.m_tableName + "<- key : ->" + key + "<-  singleDataName : ->" + m_SingleDataKey + "<- content: ->" + content + "<- \n" + e.ToString());
        }

        throw new Exception("Don't Exist Value or DefaultValue TableName is :->" + data.m_tableName + "<- key : ->" + key + "<-  singleDataName : ->" + m_SingleDataKey + "<-");// throw
    }
Beispiel #5
0
 public async Task Crawl()
 {
     try
     {
         Rootobject obj = JsonConvert.DeserializeObject <Rootobject>(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Area.txt"));
         foreach (var item in obj.GetType().GetProperties())
         {
             Area rootArea = new Area()
             {
                 Name = item.Name, Url = string.Empty, ParentId = ""
             };
             object Id = areaRepository.Add(rootArea);
             foreach (var p in ParseTool.TransFerType(item.PropertyType.FullName).GetProperties())
             {
                 var  url   = p.GetValue(item.GetValue(obj)).ToString().Substring(0, p.GetValue(item.GetValue(obj)).ToString().IndexOf("|", StringComparison.Ordinal));
                 Area areaa = new Area()
                 {
                     Name     = p.Name,
                     Url      = "http://" + url + ".58.com/",
                     ParentId = Id.ToString()
                 };
                 areaRepository.Add(areaa);
             }
         }
         Console.WriteLine("区域全部抓取完成");
     }
     catch (Exception e)
     {
         log.Error(e.ToString());
     }
 }
        public override void Execute(string[] args)
        {
            if (args.Length < 1)
            {
                App.Logger.Log($"[ParseCommand] - Use: {Name} {Syntax}");
            }
            else
            {
                string joined = string.Join(" ", args);
                if (File.Exists(joined))
                {
                    App.Logger.Log("[ParseCommand] - File found. Checking...");
                    ParseTool     pTool = new ParseTool(joined);
                    NPC.ParseType type  = pTool.GetParseType();
                    switch (type)
                    {
                    case NPC.ParseType.NPC:
                        App.Logger.Log("[ParseCommand] - Started parsing 'NPC'.");
                        MainWindow.CurrentProject.data.characters.Add(pTool.ParseCharacter());
                        App.Logger.Log("[ParseCommand] - 'NPC' parsed and imported into project.");
                        LastResult = true;
                        break;

                    case NPC.ParseType.Dialogue:
                        App.Logger.Log("[ParseCommand] - Started parsing 'Dialogue'.");
                        MainWindow.CurrentProject.data.dialogues.Add(pTool.ParseDialogue());
                        App.Logger.Log("[ParseCommand] - 'Dialogue' parsed and imported into project.");
                        LastResult = true;
                        break;

                    case NPC.ParseType.Vendor:
                        App.Logger.Log("[ParseCommand] - Started parsing 'Vendor'.");
                        MainWindow.CurrentProject.data.vendors.Add(pTool.ParseVendor());
                        App.Logger.Log("[ParseCommand] - 'Vendor' parsed and imported into project.");
                        LastResult = true;
                        break;

                    case NPC.ParseType.Quest:
                        App.Logger.Log("[ParseCommand] - Started parsing 'Quest'.");
                        MainWindow.CurrentProject.data.quests.Add(pTool.ParseQuest());
                        App.Logger.Log("[ParseCommand] - 'Quest' parsed and imported into project.");
                        LastResult = true;
                        break;

                    default:
                        LastResult = false;
                        App.Logger.Log("[ParseCommand] - Invalid file.");
                        break;
                    }
                }
                else
                {
                    LastResult = false;
                    App.Logger.Log("[ParseCommand] - File not found.");
                }
            }
        }
Beispiel #7
0
    public void PaseArray2()
    {
        string arrayStringContent = "haha|papa|ko#888";


        Array array = ParseTool.String2Array(FieldType.StringArray, arrayStringContent, new char[] { });

        Debug.Assert(array != null);
        Debug.Log(JsonUtils.ToJson(array));
    }
Beispiel #8
0
    public string[] GetStringArray(string key)
    {
        if (this.ContainsKey(key))
        {
            return(ParseTool.String2StringArray(this[key]));
        }

        if (data.m_defaultValue.ContainsKey(key))
        {
            return(ParseTool.String2StringArray(data.m_defaultValue[key]));
        }

        throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataName + "<-");// throw
    }
Beispiel #9
0
    public Color GetColor(string key)
    {
        if (this.ContainsKey(key))
        {
            return(ParseTool.String2Color(this[key]));
        }

        if (data.m_defaultValue.ContainsKey(key))
        {
            return(ParseTool.String2Color(data.m_defaultValue[key]));
        }

        throw new Exception("Don't Exist Value or DefaultValue by " + key); // throw
    }
Beispiel #10
0
    public Color GetColor(string key)
    {
        try
        {
            if (this.ContainsKey(key))
            {
                return(ParseTool.String2Color(this[key]));
            }

            if (data.m_defaultValue.ContainsKey(key))
            {
                return(ParseTool.String2Color(data.m_defaultValue[key]));
            }
        }
        catch (Exception e)
        {
            throw new Exception("SingleData GetColor Error TableName is :->" + data.m_tableName + "<- key->" + key + "<-  singleDataName : ->" + m_SingleDataKey + "<- \n" + e.ToString());
        }

        throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataKey + "<-"); // throw
    }
Beispiel #11
0
    public Array GetArray(string key)
    {
        try
        {
            if (this.ContainsKey(key))
            {
                return(ParseTool.String2Array(data.GetFieldType(key), this[key], data.GetArraySplitFormat(key)));
            }

            else if (data.m_defaultValue.ContainsKey(key))
            {
                return(ParseTool.String2Array(data.GetFieldType(key), data.m_defaultValue[key], data.GetArraySplitFormat(key)));
            }
        }
        catch (Exception e)
        {
            throw new Exception("SingleData GetStringArray2 Error TableName is :->" + data.m_tableName + "<- key->" + key + "<-  singleDataName : ->" + m_SingleDataKey + "<- \n" + e.ToString());
        }

        throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataKey + "<-");// throw
    }
 public Color GetColor()
 {
     return(ParseTool.String2Color(m_content));
 }
 public Vector3 GetVector3()
 {
     return(ParseTool.String2Vector3(m_content));
 }
 public new static bool TryParse(string notification, out AmazonSESNotification amazonSESNotification)
 {
     return(ParseTool.TryParseAmazonSESNotification(notification, out amazonSESNotification, typeof(AmazonSESComplaintNotification)));
 }
 public new static AmazonSESComplaintNotification Parse(string notification)
 {
     return((AmazonSESComplaintNotification)ParseTool.ParseAmazonSESNotification(notification, typeof(AmazonSESComplaintNotification)));
 }
    /// <summary>
    /// 将字段类型(FieldType)转换为对应 数据类型(Type)
    /// </summary>
    /// <param name="fieldValueType"></param>
    /// <param name="enumType"></param>
    /// <returns></returns>
    public static Type ConfigFieldValueType2Type(FieldType fieldValueType, string enumType, List <char> arraySplitFormat)
    {
        Type t = null;

        switch (fieldValueType)
        {
        case FieldType.String:
            t = typeof(string);
            break;

        case FieldType.Bool:
            t = typeof(bool);
            break;

        case FieldType.Int:
            t = typeof(int);
            break;

        case FieldType.Float:
            t = typeof(float);
            break;

        case FieldType.Vector2:
            t = typeof(Vector2);
            break;

        case FieldType.Vector3:
            t = typeof(Vector3);
            break;

        case FieldType.Color:
            t = typeof(Color);
            break;

        case FieldType.Enum:
            t = ReflectionUtils.GetTypeByTypeFullName(enumType);
            break;

        case FieldType.StringArray:
            t = ParseTool.CreateInterleavedType(typeof(string), arraySplitFormat.Count + 1);
            // t = typeof(string[]);
            break;

        case FieldType.IntArray:
            //  t = typeof(int[]);
            t = ParseTool.CreateInterleavedType(typeof(int), arraySplitFormat.Count + 1);
            break;

        case FieldType.FloatArray:
            //  t = typeof(float[]);
            t = ParseTool.CreateInterleavedType(typeof(float), arraySplitFormat.Count + 1);
            break;

        case FieldType.BoolArray:
            // t = typeof(bool[]);
            t = ParseTool.CreateInterleavedType(typeof(bool), arraySplitFormat.Count + 1);
            break;

        case FieldType.Vector2Array:
            // t = typeof(Vector2[]);
            t = ParseTool.CreateInterleavedType(typeof(Vector2), arraySplitFormat.Count + 1);
            break;

        case FieldType.Vector3Array:
            // t = typeof(Vector3[]);
            t = ParseTool.CreateInterleavedType(typeof(Vector3), arraySplitFormat.Count + 1);
            break;

        default:
            break;
        }

        return(t);
    }
    /// <summary>
    /// 原始表格字符串类型转换为具体的数据
    /// </summary>
    /// <param name="v"></param>
    /// <param name="fieldValueType"></param>
    /// <param name="enumType"></param>
    /// <returns></returns>
    public static object TableString2ObjectValue(string v, FieldType fieldValueType, string enumType, List <char> m_ArraySplitFormat)
    {
        object t = null;

        switch (fieldValueType)
        {
        case FieldType.String:
            t = v;
            break;

        case FieldType.Bool:
            t = bool.Parse(v);
            break;

        case FieldType.Int:
            t = int.Parse(v);
            break;

        case FieldType.Float:
            t = float.Parse(v);
            break;

        case FieldType.Vector2:
            t = ParseTool.String2Vector2(v);
            break;

        case FieldType.Vector3:
            t = ParseTool.String2Vector3(v);
            break;

        case FieldType.Color:
            t = ParseTool.String2Color(v);
            break;

        case FieldType.Enum:
            Type type = ConfigFieldValueType2Type(fieldValueType, enumType, m_ArraySplitFormat);
            try
            {
                t = Enum.Parse(type, v);
            }
            catch (Exception e)
            {
                t = Enum.GetValues(type).GetValue(0);
                // Debug.LogError("fieldValueType:" + fieldValueType + " enumType:" + enumType + " type:" + type + " v:" + v + "\n"+e);
                throw e;
            }

            break;

        case FieldType.StringArray:

        //t = ParseTool.String2StringArray(v);
        //break;
        case FieldType.IntArray:
        //t = ParseTool.String2IntArray(v);
        //break;
        case FieldType.FloatArray:
        //t = ParseTool.String2FloatArray(v);
        //break;
        case FieldType.BoolArray:
        //t = ParseTool.String2BoolArray(v);
        //break;
        case FieldType.Vector2Array:
        //t = ParseTool.String2Vector2(v);
        //break;
        case FieldType.Vector3Array:
            //t = ParseTool.String2Vector3Array(v);
            t = ParseTool.String2Array(fieldValueType, v, m_ArraySplitFormat.ToArray());
            break;

        default:

            break;
        }

        return(t);
    }
Beispiel #18
0
        /// <summary>
        /// 抓取求租
        /// </summary>
        /// <param name="area"></param>
        public void CrawlDataBegRent(Area area)
        {
            try
            {
                Crawler         crawler   = new Crawler();
                string          url       = area.Url + ConstVar.求租 + "0/";
                string          html      = crawler.Crawl(url, Encoding.UTF8);
                var             htmlParse = new HtmlParser();
                IHtmlDocument   docuement = htmlParse.Parse(html);
                List <IElement> eles      = docuement.QuerySelectorAll("div").ToList().Where(p => p.ClassName == "pager")
                                            .ToList();
                if (eles.Count > 0)
                {
                    IHtmlDocument   htmlA    = htmlParse.Parse(eles[0].InnerHtml);
                    List <IElement> spanEles = htmlA.QuerySelectorAll("span").ToList();


                    int page = 0;
                    if (spanEles.Count > 2)
                    {
                        IElement el = spanEles[spanEles.Count - 2];
                        page = int.Parse(el.InnerHtml);
                    }
                    else
                    {
                        page = 1;
                    }


                    List <string> urls = new List <string>();//分页
                    for (int i = 1; i <= page; i++)
                    {
                        string str = url + "pn" + i + "/";
                        urls.Add(str);
                    }

                    foreach (var e in urls)
                    {
                        try
                        {
                            //抓取每页
                            string htmlB = crawler.Crawl(e, Encoding.UTF8);

                            IDocument docuemnt = htmlParse.Parse(htmlB);
                            IElement  eleist   = docuemnt.QuerySelectorAll("ul").Where(p => p.ClassName == "house-list-wrap")
                                                 .ToList().FirstOrDefault();
                            IDocument       docuementC = htmlParse.Parse(eleist.InnerHtml);
                            List <IElement> eliss      = docuementC.QuerySelectorAll("div").Where(p => p.ClassName == "list-info")
                                                         .ToList();
                            //抓取每条
                            Parallel.For(0, eliss.Count + 1, i =>
                            {
                                string itemUrl = string.Empty;
                                try
                                {
                                    IDocument documentD = htmlParse.Parse(eliss[i].InnerHtml);

                                    IElement eloo = documentD.QuerySelector("a");
                                    itemUrl       = eloo.GetAttribute("href");
                                    var htmlE     = crawler.Crawl(itemUrl, Encoding.UTF8);

                                    //开始解析
                                    IDocument documentE = htmlParse.Parse(htmlE);
                                    IElement time       = documentE.QuerySelectorAll("div")
                                                          .FirstOrDefault(o => o.ClassName == "other");
                                    string update = time.InnerHtml.Substring(0, time.InnerHtml.IndexOf("<"))
                                                    .Replace("发布时间:", "").Trim();
                                    DateTime updateime =
                                        ParseTool.StringToDateTime(ParseTool.StringToDateTime(update)
                                                                   .ToShortDateString());
                                    if (updateime > DateTime.Now.AddMonths(-2))
                                    {
                                        //标题
                                        string InfoTitle = documentE.QuerySelectorAll("h1").FirstOrDefault().InnerHtml
                                                           .Trim();
                                        //详细内容
                                        string InfoContent = documentE.QuerySelectorAll("div")
                                                             .FirstOrDefault(u => u.ClassName == "maincon").InnerHtml.Trim();

                                        //电话
                                        string Phone = documentE.QuerySelectorAll("span")
                                                       .FirstOrDefault(u => u.ClassName == "phone").InnerHtml.Trim();
                                        //租金
                                        string rentMoney = documentE.QuerySelectorAll("em")
                                                           .FirstOrDefault(u => u.ClassName == "redfont").InnerHtml.Trim();
                                        //面积
                                        string areasize =
                                            htmlParse.Parse(documentE.QuerySelectorAll("ul")
                                                            .FirstOrDefault(u => u.ClassName == "info").InnerHtml)
                                            .QuerySelectorAll("li").ToList()[2].InnerHtml.Replace("面积:", "")
                                            .Replace("㎡", "").Trim();
                                        //客户名
                                        string customerName = documentE.QuerySelectorAll("a")
                                                              .Where(u => u.ClassName == "tx").ToList()[1].InnerHtml.Trim();
                                        var infolilist = htmlParse
                                                         .Parse(documentE.QuerySelectorAll("ul")
                                                                .FirstOrDefault(u => u.ClassName == "info")
                                                                .InnerHtml).QuerySelectorAll("li");
                                        //区域名字
                                        string AreaName = string.Join(",",
                                                                      htmlParse.Parse(infolilist[0].InnerHtml).QuerySelectorAll("a")
                                                                      .Select(p => p.InnerHtml.Trim()).ToList()).Trim();
                                        ShopBegRent shop  = new ShopBegRent();
                                        shop.AreaName     = AreaName;
                                        shop.AreaId       = area.Id.ToString();
                                        shop.InfoContent  = InfoContent;
                                        shop.InfoTitle    = InfoTitle;
                                        shop.Phone        = Phone;
                                        shop.MaxRentMoney = ParseTool.StringToDouble(rentMoney) + 1000;
                                        shop.MinRentMoney = (ParseTool.StringToDouble(rentMoney) - 1000) > 0
                                            ? (ParseTool.StringToDouble(rentMoney) - 1000)
                                            : 0;
                                        shop.Customer   = customerName;
                                        shop.UpdateTime = updateime;
                                        if (areasize.Contains("-"))
                                        {
                                            string[] areasizes = areasize.Split('-');
                                            shop.MinArea       = ParseTool.StringToDouble(areasizes[0]);
                                            shop.MaxArea       = ParseTool.StringToDouble(areasizes[1]);
                                        }
                                        else
                                        {
                                            shop.MinArea = ParseTool.StringToDouble(areasize) - 10 > 0
                                                ? double.Parse(areasize) - 10
                                                : 0;
                                            shop.MaxArea = ParseTool.StringToDouble(areasize) + 10;
                                        }

                                        shop.UpdateTime = updateime;
                                        shop.Id         = Guid.NewGuid();
                                        shopbegrepo.Add(shop);


                                        Console.WriteLine(area.Name + "添加了一条商铺求租");
                                    }
                                }
                                catch (Exception exception)
                                {
                                    errorUrlrepsitory.Add(new ErrorUrl()
                                    {
                                        Url = itemUrl, UrlType = UrlType.Item
                                    });
                                    log.Error(exception.ToString());
                                }
                            });
                        }
                        catch (Exception exception)
                        {
                            errorUrlrepsitory.Add(new ErrorUrl()
                            {
                                Url = e, UrlType = UrlType.Page
                            });
                            log.Error(exception.ToString());
                        }
                    }
                }

                Console.WriteLine("抓取" + area.Name + "求租信息完成");
            }
            catch (Exception e)
            {
                log.Error(e.ToString());
                Console.WriteLine(e);
            }
        }
Beispiel #19
0
 public string[] GetStringArray()
 {
     return(ParseTool.String2StringArray(m_content));
 }
 public static bool TryParse(string notification, out AmazonSESNotification amazonSESNotification)
 {
     return(ParseTool.TryParseAmazonSESNotification(notification, out amazonSESNotification));
 }
 public static AmazonSESNotification Parse(string notification)
 {
     return(ParseTool.ParseAmazonSESNotification(notification));
 }
    public static object TableString2ObjectValue(string v, FieldType fieldValueType, string enumType)
    {
        object t = null;

        switch (fieldValueType)
        {
        case FieldType.String:
            t = v;
            break;

        case FieldType.Bool:
            t = bool.Parse(v);
            break;

        case FieldType.Int:
            t = int.Parse(v);
            break;

        case FieldType.Float:
            t = float.Parse(v);
            break;

        case FieldType.Vector2:
            t = ParseTool.String2Vector2(v);
            break;

        case FieldType.Vector3:
            t = ParseTool.String2Vector3(v);
            break;

        case FieldType.Color:
            t = ParseTool.String2Color(v);
            break;

        case FieldType.Enum:
            Type type = ConfigFieldValueType2Type(fieldValueType, enumType);
            t = Enum.Parse(type, v);
            break;

        case FieldType.StringArray:
            t = ParseTool.String2StringArray(v);
            break;

        case FieldType.IntArray:
            t = ParseTool.String2IntArray(v);
            break;

        case FieldType.FloatArray:
            t = ParseTool.String2FloatArray(v);
            break;

        case FieldType.BoolArray:
            t = ParseTool.String2BoolArray(v);
            break;

        case FieldType.Vector2Array:
            t = ParseTool.String2Vector2(v);
            break;

        case FieldType.Vector3Array:
            t = ParseTool.String2Vector3Array(v);
            break;

        default:
            break;
        }

        return(t);
    }
Beispiel #23
0
        /// <summary>
        /// 抓取出租信息
        /// </summary>
        /// <param name="area"></param>
        public void CrawlDataCz(Area area)
        {
            string url = string.Empty;

            try
            {
                Crawler crawler = new Crawler();
                url = area.Url + ConstVar.出租 + "0/";
                string          html      = crawler.Crawl(url, Encoding.UTF8);
                var             htmlParse = new HtmlParser();
                IHtmlDocument   docuement = htmlParse.Parse(html);
                List <IElement> eles      = docuement.QuerySelectorAll("div").ToList().Where(p => p.ClassName == "pager")
                                            .ToList();
                if (eles.Count > 0)
                {
                    IHtmlDocument   htmlA    = htmlParse.Parse(eles[0].InnerHtml);
                    List <IElement> spanEles = htmlA.QuerySelectorAll("span").ToList();


                    int page = 0;
                    if (spanEles.Count > 2)
                    {
                        IElement el = spanEles[spanEles.Count - 2];
                        page = int.Parse(el.InnerHtml);
                    }
                    else
                    {
                        page = 1;
                    }

                    for (int i = 1; i < page + 1; i++)
                    {
                        string str = string.Empty;
                        try
                        {
                            str = url + "pn" + i + "/";
                            Crawler crawlerA = new Crawler();
                            string  htmlB    = crawlerA.Crawl(str, Encoding.UTF8);

                            IDocument docuemnt = htmlParse.Parse(htmlB);
                            IElement  eleist   = docuemnt.QuerySelectorAll("ul")
                                                 .Where(p => p.ClassName == "house-list-wrap").ToList().FirstOrDefault();


                            IDocument       docuementC = htmlParse.Parse(eleist.InnerHtml);
                            List <IElement> eliss      = docuementC.QuerySelectorAll("div").Where(p => p.ClassName == "pic")
                                                         .ToList();
                            Parallel.ForEach(eliss, p =>
                            {
                                string urlA = string.Empty;
                                try
                                {
                                    IDocument documentD = htmlParse.Parse(p.InnerHtml);

                                    IElement eloo = documentD.QuerySelector("a");
                                    urlA          = eloo.GetAttribute("href").ToString();
                                    var htmlE     = crawler.Crawl(eloo.GetAttribute("href").ToString(), Encoding.UTF8);


                                    IDocument documentE = htmlParse.Parse(htmlE);
                                    IElement ele        = documentE.QuerySelectorAll("span")
                                                          .Where(o => o.InnerHtml.StartsWith("更新于")).FirstOrDefault();
                                    DateTime time = ParseTool.StringToDateTime(ele.InnerHtml.Replace("更新于", ""));
                                    if (time > DateTime.Now.AddMonths(-2))
                                    {
                                        IElement InfoTitleElee = documentE.QuerySelectorAll("h1")
                                                                 .FirstOrDefault(o => o.ClassName == "c_000 f20");

                                        IElement money = documentE.QuerySelectorAll("span")
                                                         .FirstOrDefault(o => o.ClassName == "house_basic_title_money_num");
                                        var InfoContent = documentE.QuerySelectorAll("div")
                                                          .Where(o => o.ClassName == "general-item-wrap").FirstOrDefault(u =>
                                                                                                                         u.ParentElement.ClassName == "general-item general-miaoshu");
                                        var Customer = documentE.QuerySelectorAll("span")
                                                       .FirstOrDefault(o => o.ClassName == "f14 c_333 jjrsay");
                                        var phone = documentE.QuerySelectorAll("p")
                                                    .FirstOrDefault(o => o.ClassName == "phone-num");


                                        var InfoEles = htmlParse.Parse(documentE.QuerySelectorAll("ul")
                                                                       .FirstOrDefault(o => o.ClassName == "house_basic_title_content")
                                                                       ?.InnerHtml).QuerySelectorAll("li").ToList();
                                        //面积
                                        IElement areasize = htmlParse.Parse(InfoEles[0].InnerHtml)
                                                            .QuerySelectorAll("span")
                                                            .FirstOrDefault(o => o.ClassName == "house_basic_title_content_item2");
                                        //行业名字
                                        IElement IndustryName = htmlParse.Parse(InfoEles[2].InnerHtml)
                                                                .QuerySelectorAll("span")
                                                                .FirstOrDefault(o => o.ClassName == "house_basic_title_content_item3");
                                        IElement address = htmlParse.Parse(InfoEles[5].InnerHtml).QuerySelectorAll("a")
                                                           .FirstOrDefault(o =>
                                                                           o.ClassName == "house_basic_title_content_item3 blue-link");
                                        IElement addressDetail = htmlParse.Parse(InfoEles[5].InnerHtml)
                                                                 .QuerySelectorAll("span")
                                                                 .FirstOrDefault(o =>
                                                                                 o.ClassName == "house_basic_title_content_item3 xxdz-des");

                                        var shoptransfer = new ShopRentOrTransfer()
                                        {
                                            Id            = Guid.NewGuid(),
                                            ShopArea      = areasize == null ? "" : areasize.InnerHtml,
                                            InfoTitle     = InfoTitleElee == null ? "" : InfoTitleElee.InnerHtml,
                                            TransFerMoney = money == null ? "" : money.InnerHtml,
                                            Address       = address == null ? "" : string.Join("", address.InnerHtml),
                                            DetailAddress = addressDetail == null ? "" : addressDetail.InnerHtml,
                                            InfoContent   = InfoContent == null ? "" : InfoContent.InnerHtml,
                                            InfoType      = Model.BaseModel.InfoType.出租,
                                            IndustryName  = IndustryName == null ? "" : IndustryName.InnerHtml,
                                            Customer      = Customer == null ? "" : Customer.InnerHtml,
                                            Phone         = phone == null ? "" : phone.InnerHtml,
                                            AreaId        = area.Id.ToString(),
                                            UpdateTime    = time
                                        };
                                        var imgUl = documentE.QuerySelectorAll("ul")
                                                    .FirstOrDefault(o => o.ClassName == "general-pic-list");

                                        object obj    = shoprepo.Add(shoptransfer);
                                        bool resultId = (bool)obj;


                                        Console.WriteLine(area.Name + "添加一条出租信息");
                                        if (imgUl != null && resultId)
                                        {
                                            IDocument documentf = htmlParse.Parse(imgUl.InnerHtml);
                                            var tem             = documentf.QuerySelectorAll("img")
                                                                  .Select(o => o.GetAttribute("data-src"));
                                            if (tem != null && tem.Count() > 0)
                                            {
                                                foreach (var o in tem)
                                                {
                                                    if (o != null)
                                                    {
                                                        Bitmap img = crawler.CrawlPic(o);
                                                        if (img != null)
                                                        {
                                                            string path =
                                                                AppDomain.CurrentDomain.BaseDirectory + "Imgs/" +
                                                                shoptransfer.Id + "/";
                                                            if (!Directory.Exists(path))
                                                            {
                                                                Directory.CreateDirectory(path);
                                                            }

                                                            string fullPath =
                                                                path + Guid.NewGuid().ToString().Replace("-", "") +
                                                                ".png";
                                                            img.Save(fullPath);
                                                            string savePath = fullPath.Replace(
                                                                AppDomain.CurrentDomain.BaseDirectory,
                                                                "");
                                                            imgrepo.Add(new Model.Image()
                                                            {
                                                                FkId     = shoptransfer.Id,
                                                                ImageUrl = savePath,
                                                                InfoType = TableType.ShopRentOrTransfer,
                                                            });
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception e)
                                {
                                    errorUrlrepsitory.Add(new ErrorUrl()
                                    {
                                        UrlType = UrlType.Item, Url = urlA
                                    });
                                    log.Error(e.ToString());
                                }
                            });
                        }
                        catch (Exception e)
                        {
                            errorUrlrepsitory.Add(new ErrorUrl()
                            {
                                UrlType = UrlType.Page, Url = str
                            });
                            log.Error(e.ToString());
                        }
                    }
                }

                Console.WriteLine(area.Name + "出租信息抓取完成");
            }
            catch (Exception e)
            {
                errorUrlrepsitory.Add(new ErrorUrl()
                {
                    UrlType = UrlType.All, Url = url
                });
                log.Error(e.ToString());
            }
        }