Example #1
0
        public static List <ImageSearchItem> Search(string searchTerm)
        {
            return(PhantomJsUtils.Process(driver =>
            {
                try
                {
                    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
                    driver.Navigate().GoToUrl($"https://yandex.ru/images/search?text={HttpUtility.UrlEncode(searchTerm)}&isize=large");
                    var pageSource = driver.PageSource;

                    var docuemnt = new HtmlDocument();
                    docuemnt.LoadHtml(pageSource);

                    var images = docuemnt.DocumentNode.CssSelect(".serp-list .serp-item")
                                 .Select(x => HttpUtility.HtmlDecode(x.Attributes["data-bem"].Value))
                                 .Select(JsonConvert.DeserializeObject <YandexImageItem>).Select(x => new ImageSearchItem
                    {
                        Original = x.SerpItem.img_href,
                        Preview = x.SerpItem.thumb.url
                    })
                                 .ToList();

                    return images;
                }
                catch (Exception ex)
                {
                    return new List <ImageSearchItem>();
                }
            }));
        }
Example #2
0
        public static List <ProductFeedbackItem> ParseFeedbacks(string url)
        {
            return(PhantomJsUtils.Process(driver =>
            {
                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
                driver.Navigate().GoToUrl(url);
                var pageSource = driver.PageSource;
                var docuemnt = new HtmlDocument();
                docuemnt.LoadHtml(pageSource);

                var productFeedbackItems = new List <ProductFeedbackItem>();
                foreach (var reviewItem in docuemnt.DocumentNode.CssSelect(".product-review-item").ToList())
                {
                    ProductFeedbackItem productFeedbackItem = null;
                    try
                    {
                        var rating = reviewItem.CssSelect("div.rating > meta").Single().Attributes["content"].Value.TryParseNullable <decimal>();
                        var user = reviewItem.CssSelect(".product-review-user a").FirstOrDefault()?.InnerText ?? "Анонимно";
                        var pluses = reviewItem.TryDo(x => x.CssSelect(".product-review-item__stat").Skip(1).First().CssSelect(".product-review-item__text").First().InnerText);
                        var minuses = reviewItem.TryDo(x => x.CssSelect(".product-review-item__stat").Skip(2).First().CssSelect(".product-review-item__text").First().InnerText);
                        var comment = reviewItem.TryDo(x => x.CssSelect(".product-review-item__text").Last().InnerHtml);

                        productFeedbackItem = new ProductFeedbackItem
                        {
                            Stars = (int?)Math.Round(rating ?? 0),
                            Comment = comment,
                            Minuses = minuses,
                            Pluses = pluses,
                            UserName = user
                        };
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                    productFeedbackItems.Add(productFeedbackItem);
                }

                return productFeedbackItems;
            }));
        }