public void CrawlingNetImoveis()
        {
            try
            {
                ConfigureLayout cl = new ConfigureLayout();
                cl.LayoutInitial(Urls.urlNetImoveis);

                int?    posicao;
                int?    posicaoSubString;
                int?    posicaoFim;
                int[]   vetTipoImovel   = { 2, 3, 4, 5, 6, 7 };
                decimal qtdImovelResult = 1000;

                for (int j = 0; j < vetTipoImovel.Count(); j++)
                {
                    for (int i = 1; i <= qtdImovelResult; i++)
                    {
                        string urlPage         = string.Format(Urls.urlNetImoveisCrawling, Cidades.BeloHorizonte, vetTipoImovel[j], i);
                        int    registerCurrent = 0;

                        string HTML = this.RequestResponseHTML(urlPage);

                        int count  = 0;
                        int count2 = 0;

                        posicao          = HTML.Trim().IndexOf("ContentPlaceHolder1_lb_total", count);
                        posicaoSubString = HTML.Trim().IndexOf(">", posicao.Value) + 1;
                        posicaoFim       = HTML.Trim().IndexOf("<", posicaoSubString.Value);
                        qtdImovelResult  = Math.Ceiling(Convert.ToDecimal(HTML.Trim().Substring(posicaoSubString.Value, posicaoFim.Value - posicaoSubString.Value)) / 20);

                        while (count2 != -1)
                        {
                            #region Index de dados da paginas
                            ImovelVO vo = new ImovelVO();
                            registerCurrent++;
                            vo.Cidade = Cidades.BeloHorizonte;

                            count            = HTML.Trim().IndexOf("<!-- Imovel-->", count);
                            posicao          = HTML.Trim().IndexOf("ListaCampoTipo", count);
                            posicaoSubString = HTML.Trim().IndexOf(">", posicao.Value);
                            posicaoFim       = HTML.Trim().IndexOf("<", posicaoSubString.Value) - 1;

                            vo.TipoImovel = HTML.Trim().Substring(posicaoSubString.Value + 1, posicaoFim.Value - posicaoSubString.Value);

                            posicao          = HTML.Trim().IndexOf("ListaCampoBairro", count);
                            posicaoSubString = HTML.Trim().IndexOf(">", posicao.Value);
                            posicaoFim       = HTML.Trim().IndexOf("<", posicao.Value) - 1;

                            vo.Bairro = HTML.Trim().Substring(posicaoSubString.Value + 1, posicaoFim.Value - posicaoSubString.Value);

                            posicao          = HTML.Trim().IndexOf("ListaCampoArea", count);
                            posicaoSubString = HTML.Trim().IndexOf(">", posicao.Value);
                            int posinicio = HTML.Trim().IndexOf(">", posicaoSubString.Value) + 1;
                            int ultimaPos = HTML.Trim().IndexOf("<", posicaoSubString.Value);

                            string area = HTML.Trim().Substring(posicaoSubString.Value + 1, ultimaPos - posinicio);
                            vo.Area = string.IsNullOrEmpty(area) ? 0 : double.Parse(area);

                            posicao    = HTML.Trim().IndexOf("ListaCampoVagas", count);
                            posinicio  = HTML.Trim().IndexOf(">", posicao.Value);
                            posicaoFim = HTML.Trim().IndexOf("<", posinicio) - 1;

                            string vagas = HTML.Trim().Substring(posinicio + 1, posicaoFim.Value - posinicio);

                            if (!string.IsNullOrEmpty(vagas))
                            {
                                vo.VagasGaragem = int.Parse(vagas);
                            }
                            else
                            {
                                vo.VagasGaragem = 0;
                            }

                            posicao          = HTML.Trim().IndexOf("ListaCampoPreco", count);
                            posicaoSubString = HTML.Trim().IndexOf("font-size:20px;", count);

                            if (posicaoSubString.Value == -1)
                            {
                                posicaoSubString = HTML.Trim().IndexOf("PrecoImovel", count);
                            }

                            posinicio = HTML.Trim().IndexOf(">", posicaoSubString.Value) + 1;
                            ultimaPos = HTML.Trim().IndexOf("<", posicaoSubString.Value) - 1;

                            string preco = (HTML.Trim().Substring(posinicio, ultimaPos - posinicio)).Trim();
                            vo.Preco        = double.Parse(preco.Replace(",", "."));
                            vo.DataRegistro = DateTime.Now;

                            posicao         = HTML.Trim().IndexOf("ListaCodigo", count);
                            posinicio       = HTML.Trim().IndexOf(">COD. ", posicao.Value) + 1;
                            ultimaPos       = HTML.Trim().IndexOf("<", posinicio);
                            vo.CodigoImovel = long.Parse((HTML.Trim().Substring(posinicio, ultimaPos - posinicio)).Trim().Replace("COD. ", ""));
                            vo.Origem       = Origem.NetImoveis;

                            count  = HTML.Trim().IndexOf("<!-- Fim do Imovel-->", count);
                            count2 = HTML.Trim().IndexOf("<!-- Imovel-->", count);

                            CrawlerSerialize master = new CrawlerSerialize();
                            //master.SaveData(vo, urlPage, registerCurrent);

                            if (count2 == -1)
                            {
                                cl.LayoutFinalizationImportation(urlPage, i);
                            }

                            #endregion
                        }

                        Thread.Sleep(3000);
                    }
                }
            }
            catch (Exception ex)
            {
                ConfigureLayout cl = new ConfigureLayout();
                cl.LayoutException(ex);
            }
        }
Exemple #2
0
        public void CrawlingNetImoveis()
        {
            try
            {
                List <CidadesVO> cidades = this.LoadParametersXml();

                ConfigureLayout cl = new ConfigureLayout();
                cl.LayoutInitial(Urls.urlNetImoveis);

                int?        posicaoTag;
                int?        posicaoSubString;
                int?        posicaoInicioTag;
                int?        posicaoFimTag;
                int[]       vetTipoImovel   = { 2, 3, 4, 5, 6, 7, 8, 9, 119, 125, 126, 128, 133, 140, 143, 145 };
                decimal     qtdImovelResult = 1000;
                List <long> listCodImovel   = null;

                foreach (CidadesVO cidade in cidades)
                {
                    for (int j = 0; j < vetTipoImovel.Count(); j++)
                    {
                        for (int i = 1; i <= qtdImovelResult; i++)
                        {
                            string urlPage = string.Format(Urls.urlNetImoveisCrawling, cidade.Key, vetTipoImovel[j], i);
                            string HTML    = this.RequestResponseHTML(urlPage);

                            listCodImovel = new List <long>();

                            int tagIniciaImovel = 0;
                            int tagFechaImovel  = 0;

                            posicaoTag       = HTML.Trim().IndexOf("ContentPlaceHolder1_lb_total", tagIniciaImovel);
                            posicaoSubString = HTML.Trim().IndexOf(">", posicaoTag.Value) + 1;
                            posicaoFimTag    = HTML.Trim().IndexOf("<", posicaoSubString.Value);
                            qtdImovelResult  = Math.Ceiling(Convert.ToDecimal(HTML.Trim().Substring(posicaoSubString.Value, posicaoFimTag.Value - posicaoSubString.Value)) / 20);

                            if (qtdImovelResult == 0)
                            {
                                qtdImovelResult++;
                                break;
                            }
                            else
                            {
                                while (tagIniciaImovel != -1)
                                {
                                    tagIniciaImovel = HTML.Trim().IndexOf("<!-- Imovel-->", tagFechaImovel);

                                    posicaoTag       = HTML.Trim().IndexOf("ListaCodigo", tagIniciaImovel);
                                    posicaoInicioTag = HTML.Trim().IndexOf(">COD. ", posicaoTag.Value) + 1;
                                    posicaoFimTag    = HTML.Trim().IndexOf("<", posicaoInicioTag.Value);
                                    long codImovel = long.Parse((HTML.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value)).Trim().Replace("COD. ", ""));

                                    if (!listCodImovel.Contains(codImovel))
                                    {
                                        listCodImovel.Add(codImovel);
                                    }

                                    tagFechaImovel  = HTML.Trim().IndexOf("<!-- Fim do Imovel-->", tagIniciaImovel);
                                    tagIniciaImovel = HTML.Trim().IndexOf("<!-- Imovel-->", tagFechaImovel);

                                    if (tagIniciaImovel == -1)
                                    {
                                        cl.LayoutFinalizationImportation(urlPage, i);
                                    }
                                }

                                foreach (long itemCod in listCodImovel)
                                {
                                    ImovelBO bo = new ImovelBO();

                                    if (!bo.ExistImovel(itemCod))
                                    {
                                        bo.InitLog(itemCod);

                                        string urlChild = string.Format(Urls.urlNetImoveisChildCrawling, itemCod);
                                        string filtratedHtml;

                                        Thread.Sleep(1500);

                                        string htmlChild = this.RequestResponseHTML(urlChild);

                                        if (htmlChild.Trim().IndexOf("DetalhePrecoCondIptu", 0) != -1)
                                        {
                                            ImoveisVO vo = new ImoveisVO();

                                            posicaoTag       = htmlChild.Trim().IndexOf("DetalhePrecoCondIptu", 0);
                                            posicaoTag       = htmlChild.Trim().IndexOf("Preco", posicaoTag.Value);
                                            posicaoTag       = htmlChild.Trim().IndexOf("DetalhePreco", posicaoTag.Value);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf(">", posicaoTag.Value) + 1;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("<", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Preco         = string.IsNullOrEmpty(filtratedHtml) ? 0 : Convert.ToDecimal(filtratedHtml.Replace("R$", " "));

                                            int posicaoTagMarcacaoInicio = htmlChild.Trim().IndexOf("CaracPrincipal", 0);

                                            posicaoTag       = htmlChild.Trim().IndexOf("dscTipo", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf(">", posicaoTag.Value) + 1;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("<", posicaoInicioTag.Value);
                                            vo.Tipo          = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);

                                            posicaoTag       = htmlChild.Trim().IndexOf("DetalheBairro", 0);
                                            posicaoTag       = htmlChild.Trim().IndexOf("_Bairro", posicaoTag.Value);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf(">", posicaoTag.Value) + 1;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("<", posicaoInicioTag.Value);
                                            vo.Bairro        = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);

                                            vo.Codigo = itemCod;

                                            posicaoTag       = htmlChild.Trim().IndexOf("Banhos", 0);
                                            posicaoTag       = htmlChild.Trim().IndexOf("_banho", posicaoTag.Value);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.QtdBanheiros  = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag       = htmlChild.Trim().IndexOf("interfone", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.Interfone     = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag          = htmlChild.Trim().IndexOf("portale", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag    = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag       = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.PortaoEletronico = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag       = htmlChild.Trim().IndexOf("areaPri", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Area          = string.IsNullOrEmpty(filtratedHtml) ? 0 : float.Parse(filtratedHtml.Replace("m²", " ").Replace("Hec", " "));

                                            posicaoTag        = htmlChild.Trim().IndexOf("elevadorsocial", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag  = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag     = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.ElevadorSocial = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag       = htmlChild.Trim().IndexOf("suites", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtdsuites     = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag       = htmlChild.Trim().IndexOf("npavimentos", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.QtdPavimentos = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag       = htmlChild.Trim().IndexOf("salaofestas", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.Salaofestas   = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag       = htmlChild.Trim().IndexOf("pscina", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.Piscina       = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag       = htmlChild.Trim().IndexOf("nsalas", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtdsalas      = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag       = htmlChild.Trim().IndexOf("quartos", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtdquartos    = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag       = htmlChild.Trim().IndexOf("varandas", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtdvarandas   = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag            = htmlChild.Trim().IndexOf("portariapermanente", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag      = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag         = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.PortariaPermanente = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag       = htmlChild.Trim().IndexOf("posicao", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.Posicao       = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);

                                            posicaoTag       = htmlChild.Trim().IndexOf("vagas", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtdvagas      = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag        = htmlChild.Trim().IndexOf("uniporandar", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag  = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag     = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml     = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.Qtduniporandar = string.IsNullOrEmpty(filtratedHtml) ? 0 : int.Parse(filtratedHtml);

                                            posicaoTag         = htmlChild.Trim().IndexOf("consominio", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag   = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag      = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml      = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.PrecoCondominio = string.IsNullOrEmpty(filtratedHtml) ? 0 : decimal.Parse(filtratedHtml.Replace("R$", " "));

                                            posicaoTag       = htmlChild.Trim().IndexOf("iptu", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            filtratedHtml    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value);
                                            vo.PrecoIptu     = string.IsNullOrEmpty(filtratedHtml) ? 0 : decimal.Parse(filtratedHtml.Replace("R$", " "));

                                            posicaoTag       = htmlChild.Trim().IndexOf("playground", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag    = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.Playground    = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            posicaoTag         = htmlChild.Trim().IndexOf("elevadorServico", posicaoTagMarcacaoInicio);
                                            posicaoInicioTag   = htmlChild.Trim().IndexOf("b>", posicaoTag.Value) + 2;
                                            posicaoFimTag      = htmlChild.Trim().IndexOf("</b", posicaoInicioTag.Value);
                                            vo.ElevadorServico = htmlChild.Trim().Substring(posicaoInicioTag.Value, posicaoFimTag.Value - posicaoInicioTag.Value).ToLower().Equals("sim") ? true : false;

                                            vo.Cidade   = cidade.Key;
                                            vo.Origem   = "Rede Net Imoveis";
                                            vo.Estado   = "Minas Gerais";
                                            vo.DataHora = DateTime.Now;

                                            CrawlerSerialize serialize = new CrawlerSerialize();
                                            serialize.SaveData(vo, urlChild, itemCod);
                                        }
                                    }
                                    else
                                    {
                                        bo.GenerateLog(itemCod, urlPage);
                                        cl.LayoutExistRegister(urlPage, itemCod);
                                    }
                                }
                            }
                            Thread.Sleep(1500);
                        }
                    }
                }

                cl.LayoutImportationFinalized(Urls.urlNetImoveis);
            }
            catch (Exception ex)
            {
                ConfigureLayout cl = new ConfigureLayout();
                cl.LayoutException(ex);
            }
        }