Exemple #1
0
        private List <string> GetOffersLinks(string regionLink)
        {
            int           switchProxyRemindCounter = 0; //счетчик количества использования одного прокси
            string        nextPageLink             = regionLink;
            IElement      nextPageLinkDom          = null;
            List <string> offerLinks = new List <string>();

            while (true)
            {
                switchProxyRemindCounter++;
                string searchResultPageHtml;
                while (true)
                {
                    searchResultPageHtml = WebHelpers.GetHtmlThrowProxy(nextPageLink, currentProxy); //скачали страницу с выдачей
                    if (searchResultPageHtml != Constants.WebAttrsNames.NotFound)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Хреновый прокси! ");
                        UpdateInternalProxy();
                    }
                }

                var searchResultPageDom = parser.Parse(searchResultPageHtml);                                            //перегнали в DOM
                var offerLinksDom       = searchResultPageDom.QuerySelectorAll(Constants.OfferListSelectors.OfferLinks); //получили все ссылки на предложения
                if (offerLinksDom != null)                                                                               //если ссылки на странице есть, собираем в список
                {
                    offerLinks.AddRange(offerLinksDom.ToList().Select(i => Resources.BaseLink + i.GetAttribute(Constants.WebAttrsNames.href)));
                    Console.WriteLine("Добавлено предложений в список/всего: {0}/{1}, {2}", offerLinksDom.Length, offerLinks.Count, nextPageLink);
                }
                else
                {
                    Console.WriteLine("На этой странице нет ссылок: {0}", nextPageLink);
                    break;
                }
                var findNextPageButton = searchResultPageDom.QuerySelectorAll(Constants.OfferListSelectors.NextPage); //ищем кнопку на след страницу
                nextPageLinkDom = null;
                for (int o = 0; o < findNextPageButton.Length; o++)
                {
                    if (findNextPageButton[o].TextContent == ">>")
                    {
                        nextPageLinkDom = findNextPageButton[o];
                        break;
                    }
                }
                //nextPageLinkDom = searchResultPageDom.QuerySelector(Constants.OfferListSelectors.NextPage); //обращаемся к элементу, где сидит ссылка на следующую страницу выдачи
                if (nextPageLinkDom != null)
                {
                    if (nextPageLinkDom.GetAttribute(Constants.WebAttrsNames.href) != null)
                    {
                        nextPageLink = nextPageLinkDom.GetAttribute(Constants.WebAttrsNames.href).Replace("//", "https://");

                        Console.WriteLine("Next page link: {0}", nextPageLink);
                    }
                    else
                    {
                        Console.WriteLine("Ссылки на следующую страницу нет. Закансиваем собирать ссылки этого региона, {0}.", regionLink);
                        break;
                    }
                }
                else
                {
                    Console.WriteLine("Ссылки на следующую страницу нет.Закансиваем собирать ссылки этого региона, вероятно, на странице ошибка, {0}.", regionLink);
                    break;
                }


                if (switchProxyRemindCounter > 10)
                {
                    Console.WriteLine("Refreshing proxy...");
                    UpdateInternalProxy();
                    switchProxyRemindCounter = 0;
                }
            }
            return(offerLinks);
        }
 private bool ExcludeProxyByTestLink(WebProxy i)
 {
     Console.WriteLine(i.Address);
     return(WebHelpers.GetHtmlThrowProxy(Resources.BaseLink, i) == Constants.WebAttrsNames.NotFound ? true : false);
 }