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)); } }
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)); } }