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)); } }
// Api lấy về html của 1 trang web sau khi xử lý lại. Xóa hết javascript trong trang. CHuyển hết các link động sang tĩnh public IActionResult Html(string url, bool javascript) { var urlDecode = WebUtility.UrlDecode(url); Uri uriResult; // Kiểm tra xem url có hợp lệ hay không bool valid = Uri.TryCreate(urlDecode, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); if (valid) { // Download html của trang web var baseUri = new Uri(new Uri(urlDecode).GetLeftPart(UriPartial.Authority)); MyWebClient client = new MyWebClient(); client.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"; var result = client.DownloadString(urlDecode); // CHuyển đổi từ html string sang HtmlParser var parser = new HtmlParser(); var document = parser.ParseDocument(result); // IHtmlCollection <IElement> menuItems; if (!javascript) { // Xóa hết các thẻ script menuItems = document.QuerySelectorAll("script, base"); foreach (IElement item in menuItems) { item.Remove(); } } // Bắt tất cả các element có thuộc tính href menuItems = document.QuerySelectorAll("[href]"); var urltmp = ""; foreach (IElement item in menuItems) { try { // Chuyển link động sang link tĩnh urltmp = item.GetAttribute("href"); item.SetAttribute("href", new Uri(baseUri, urltmp).AbsoluteUri); } catch (Exception) { } } // Bắt tất cả các element có thuộc tính src menuItems = document.QuerySelectorAll("[src]"); foreach (IElement item in menuItems) { try { // Chuyển link động sang link tĩnh urltmp = item.GetAttribute("src"); item.SetAttribute("src", new Uri(baseUri, urltmp).AbsoluteUri); } catch (Exception) { } } // Bắt tất cả thẻ a trong trang menuItems = document.QuerySelectorAll("a"); foreach (IElement item in menuItems) { try { // Chuyển link động sang link tĩnh urltmp = item.GetAttribute("href"); item.SetAttribute("href", "javascript:LinkInfo(\"" + new Uri(baseUri, urltmp).AbsoluteUri + "\");"); } catch (Exception) { } } // Bổ sung thêm file css, js để xử lý thêm trong trang var element = document.CreateElement("link"); element.SetAttribute("href", "/Content/myStyle.css"); element.SetAttribute("rel", "stylesheet"); document.Head.AppendChild(element); var body = document.Body; element = document.CreateElement("script"); element.SetAttribute("src", "/Scripts/jquery-3.3.1.min.js"); body.Append(element); var scriptcss = document.CreateElement("script"); scriptcss.SetAttribute("src", "/Scripts/css-selector-generator.js"); body.Append(scriptcss); var baseurl = client.ResponseUri.ToString(); var scriptInBody = document.CreateElement("script"); scriptInBody.InnerHtml = "var url = \"" + baseurl + "\";"; body.Append(scriptInBody); var script = document.CreateElement("script"); script.SetAttribute("src", "/Scripts/myScript.min.js"); body.Append(script); return(PartialView((object)document.DocumentElement.OuterHtml)); } else { ViewBag.Data = urlDecode; return(View("Error")); } }