public IActionResult JsonResult([FromBody] ObjectJson json)
        {
            var         url    = WebUtility.UrlDecode(json.url);
            MyWebClient client = new MyWebClient()
            {
                Encoding = Encoding.UTF8
            };

            client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
            if (json.isID)
            {
                client.DownloadData(url);
                var    mainUrl = client.ResponseUri.ToString();
                var    regex   = JsonConvert.DeserializeObject <JsonIDInput>(json.data);
                string item    = "";
                try
                {
                    var regexMatch = Regex.Match(mainUrl, regex._xpath);
                    item = regexMatch.Groups[regex.group_number].Value;
                }
                catch (Exception) { }
                return(Json(JsonConvert.SerializeObject(new JsonIDresult {
                    url = mainUrl, id = item
                }, Formatting.Indented)));
            }
            else
            {
                var          baseUri  = new Uri(url);
                var          isScript = json.javascript;
                var          config   = StructuredDataConfig.ParseJsonString(json.data);
                var          html     = client.DownloadString(!isScript ? url : this.configuration.GetAppSetting("UrlSeleniumGetHtmlExcuteJavascript") + "?url=" + WebUtility.UrlEncode(url));
                HtmlDocument docc     = new HtmlDocument();
                docc.LoadHtml(html);
                var urltmp = "";
                HtmlNodeCollection nodes = docc.DocumentNode.SelectNodes("//a");
                if (nodes != null)
                {
                    foreach (HtmlNode node in nodes)
                    {
                        if ((node.Attributes["href"] != null) && (node.Attributes["href"].Value != ""))
                        {
                            try
                            {
                                urltmp = node.Attributes["href"].Value.Trim();
                                node.Attributes["href"].Value = new Uri(baseUri, urltmp).AbsoluteUri;
                            }
                            catch (Exception) { }
                        }
                    }
                }
                ;
                html = docc.DocumentNode.InnerHtml;
                var openScraping    = new StructuredDataExtractor(config);
                var scrapingResults = openScraping.Extract(html);
                var result          = JsonConvert.SerializeObject(scrapingResults, Formatting.Indented);
                return(Json(result));
            }
        }
Example #2
0
        public ResultReturn pushDataToCategory([FromForm] ResultList result1)
        {
            try
            {
                {
                    // Lấy ra danh sách url strong start_url cần bổ sung
                    var urls = entities.start_url.Where(m => result1.result.Contains(m.ID)).ToList();
                    if (urls != null)
                    {
                        var         countUrl = 0;
                        MyWebClient client   = new MyWebClient()
                        {
                            Encoding = Encoding.UTF8
                        };
                        client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";

                        foreach (var url1 in urls)
                        {
                            try
                            {
                                // Kiểm tra xem url có hợp lệ không
                                var  urltmp = url1.url;
                                bool isUrl  = Uri.TryCreate(urltmp, UriKind.Absolute, out Uri baseUri) &&
                                              (baseUri.Scheme == Uri.UriSchemeHttp || baseUri.Scheme == Uri.UriSchemeHttps);
                                if (isUrl)
                                {
                                    var myDomain = baseUri.Authority;
                                    // Loại bỏ www ở đầu domain
                                    myDomain = myDomain.StartsWith("www.") ? myDomain.Substring(4) : myDomain;
                                    // lấy ra cấu hình của domain
                                    var domains = entities.Domain.Where(domain => (myDomain == domain.Domain1 || myDomain.EndsWith("." + domain.Domain1)) &&
                                                                        domain.Type == 2).ToList();

                                    if (domains.Count > 0)
                                    {
                                        Domain domain = null;
                                        foreach (Domain domaintmp in domains)
                                        {
                                            if (domaintmp.Domain1 == myDomain)
                                            {
                                                domain = domaintmp;
                                                break;
                                            }
                                        }
                                        if (domain == null)
                                        {
                                            domain = domains.FirstOrDefault();
                                        }

                                        var data        = client.DownloadData(urltmp);
                                        var contentType = client.ResponseHeaders["Content-Type"];
                                        // Kiểm tra xem nội dung của trang web có phải là html hay không
                                        if (contentType.StartsWith(@"text/"))
                                        {
                                            var          jsonConfig = domain.Content;
                                            var          config     = StructuredDataConfig.ParseJsonString(jsonConfig);
                                            HtmlDocument docc       = new HtmlDocument();
                                            var          html       = Encoding.UTF8.GetString(data);
                                            docc.LoadHtml(html);
                                            var url = "";
                                            // Chuyển link động trong trang web thành link tĩnh
                                            HtmlNodeCollection nodes = docc.DocumentNode.SelectNodes("//a");
                                            if (nodes != null)
                                            {
                                                foreach (HtmlNode node in nodes)
                                                {
                                                    if ((node.Attributes["href"] != null) && (node.Attributes["href"].Value != ""))
                                                    {
                                                        try
                                                        {
                                                            url = node.Attributes["href"].Value.Trim();
                                                            node.Attributes["href"].Value = new Uri(baseUri, url).AbsoluteUri;
                                                        }
                                                        catch { }
                                                    }
                                                }
                                            }
                                            ;
                                            html = docc.DocumentNode.InnerHtml;
                                            // Bóc tách ra danh sách chủ đề của domain dựa vào cấu hình
                                            var openScraping    = new StructuredDataExtractor(config);
                                            var scrapingResults = openScraping.Extract(html);
                                            var result          = JsonConvert.SerializeObject(scrapingResults, Formatting.Indented);
                                            // Lấy ra danh sách chủ đề trong trang báo
                                            if (scrapingResults.Count > 0)
                                            {
                                                var    o     = JObject.Parse(result);
                                                JToken token = o["link"];
                                                if (token != null)
                                                {
                                                    List <url_crawl_list> listCrawl = new List <url_crawl_list>()
                                                    {
                                                    };
                                                    int count  = 0;
                                                    var lsturl = token is JArray ? ((JArray)token).Select(m => m?.ToString()?.Trim()).Where(m => !string.IsNullOrWhiteSpace(m)).Distinct().ToList() : new List <string>()
                                                    {
                                                        token.ToString()
                                                    };
                                                    foreach (var valuetmp in lsturl)
                                                    {
                                                        if (valuetmp.Contains(myDomain) && valuetmp.StartsWith("http"))
                                                        {
                                                            listCrawl.Add(new url_crawl_list {
                                                                url = valuetmp, status = 1, domain = myDomain, interval = result1.interval, module = result1.module, schedule_time = DateTime.Now
                                                            });
                                                            count++;
                                                        }
                                                    }
                                                    if (count > 0)
                                                    {
                                                        countUrl++;
                                                        // Thêm danh sách url chủ đề vào bảng url_crawl_list
                                                        //entities.Database.ExecuteSqlRaw("usp_url_crawl_list_addList"
                                                        //, UrlCrawlListParameters("@urlCrawlList", listCrawl));
                                                        entities.Database.ExecuteSqlCommand(new RawSqlString("usp_url_crawl_list_addList")
                                                                                            , UrlCrawlListParameters("@urlCrawlList", listCrawl));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (Exception)
                            {
                            }
                        }
                        if (countUrl > 0)
                        {
                            return(new ResultReturn("Thêm thành công " + countUrl + " url !", 1));
                        }
                        return(new ResultReturn("Không thêm được url nào, vui lòng xem lại cấu hình!", -1));
                    }
                    else
                    {
                        return(new ResultReturn("Không tìm thấy bản ghi nào!", -1));
                    }
                }
            }
            catch
            {
                return(new ResultReturn("Thêm thất bại!", -1));
            }
        }