From 5a3fe22deb2bb2e226b4b9dcb1fc46e95de422a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?old=E6=98=93?= <156663459@qq.com> Date: Thu, 7 Mar 2024 16:36:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=86=B2=E7=A8=B3?= =?UTF-8?q?=E4=BF=9D=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BASE/T_EnrollmentPlanedescRepository.cs | 29 +++++----- New_Spider/HtmlAgNewsHelper.cs | 54 ++++++++++++++++++- New_Spider/New_Spider.csproj | 4 +- New_Spider/Program.cs | 4 +- 4 files changed, 73 insertions(+), 18 deletions(-) diff --git a/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs b/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs index 0662327..dd2679d 100644 --- a/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs +++ b/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs @@ -186,11 +186,12 @@ namespace New_College.Repository //.WhereIF(query.Year > 0, p => p.Years == query.Year) .WhereIF(!string.IsNullOrEmpty(query.Location), p => p.Location == query.Location) //.WhereIF(!string.IsNullOrEmpty(query.BatchName), p => p.BatchName == query.BatchName) - .WhereIF(string.IsNullOrWhiteSpace(query.Type), p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15)) - .WhereIF(query.Type == "冲", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 15 && int.Parse(p._23Score) > query.Score + 5)) - .WhereIF(query.Type == "稳", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) <= query.Score + 5 && int.Parse(p._23Score) > query.Score - 15)) - .WhereIF(query.Type == "保", p => int.Parse(p._23Score) > 0 && (int.Parse(p._23Score) < query.Score - 15)) - .WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), c => SqlFunc.Contains(c._24subject, claim[0]) || SqlFunc.Contains(c._24subject, claim[1]) || SqlFunc.Contains(c._24subject, claim[2]) || c._24subject == "不限") + .WhereIF(string.IsNullOrWhiteSpace(query.Type), p => int.Parse(p._23Score) > 0 && SqlFunc.Between(int.Parse(p._23Score), query.Score - 60, query.Score + 15)) + // .WhereIF(string.IsNullOrWhiteSpace(query.Type), p => int.Parse(p._23Score) > 0 && SqlFunc.Between(int.Parse(p._23Score), query.Score, query.Score + 15)) + .WhereIF(query.Type == "冲", p => int.Parse(p._23Score) > 0 && SqlFunc.Between(int.Parse(p._23Score), query.Score, query.Score + 15)) + .WhereIF(query.Type == "稳", p => int.Parse(p._23Score) > 0 && SqlFunc.Between(int.Parse(p._23Score), query.Score - 26, query.Score - 1)) + .WhereIF(query.Type == "保", p => int.Parse(p._23Score) > 0 && SqlFunc.Between(int.Parse(p._23Score), query.Score - 60, query.Score - 26)) + .WhereIF(!string.IsNullOrWhiteSpace(query.SubjectClaim), c => SqlFunc.Contains(c._24subject, claim[0]) || SqlFunc.Contains(c._24subject, claim[1]) || SqlFunc.Contains(c._24subject, claim[2]) || c._24subject == "不限") .WhereIF(majornames.Any() && majornames.Count() > 0, p => SqlFunc.ContainsArray(majornames, p.MajorName)) .ToListAsync(); @@ -200,26 +201,26 @@ namespace New_College.Repository { Id = c.Id, Logo = c.Logo, Name = c.Name }).ToList(); var ulist = universitylist.Select(s => new UniversityEnrollmentPlanResult() { - Logo = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Logo, - UniversityId = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Id, - AreaName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Province, - UniversityCode = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).EnrollmentCode, + Logo = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName) != null ? universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Logo : "", + UniversityId = universitytemps.FirstOrDefault(e => e.Name == s.UniversityName) != null ? universitytemps.FirstOrDefault(e => e.Name == s.UniversityName).Id : 0, + AreaName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Province : "", + UniversityCode = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).EnrollmentCode : "", Rank = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).UniversityRank.ToString(), _985 = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("985") ? "是" : "否") : "否", _211 = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("211") ? "是" : "否") : "否", _SYL = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel != null ? (recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).LnstitutionalLevel.Contains("双一流") ? "是" : "否") : "否", - SchoolScoreline = int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScoreLine), - SchoolLowScore = int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScore), + SchoolScoreline = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScoreLine) : 0, + SchoolLowScore = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23SchoolScore) : 0, Type = MajorPlanScoreTool.GetPlanScore(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score) == 2 ? "冲" : MajorPlanScoreTool.GetPlanScore(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score) == 1 ? "稳" : "保",//冲稳保院校 Percentage = MajorPlanScoreTool.GetPlanPercentage(int.Parse(recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName)._23Score), (int)query.Score), - AscriptionName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Ownership, - CityName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).City, + AscriptionName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).Ownership : "", + CityName = recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName) != null ? recommendInfo.FirstOrDefault(e => e.UniversityName == s.UniversityName).City : "", MjaorPlan = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Count(), planCount = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Sum(m => int.Parse(m._23Count)), PlanIds = recommendInfo.Where(e => e.UniversityName == s.UniversityName).Select(c => c.ID).ToList(), UniversityName = s.UniversityName, - }).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize).ToList(); + }).OrderByDescending(t => t.Type).OrderBy(t => t.SchoolScoreline).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize).ToList(); return new MessageModel>() { diff --git a/New_Spider/HtmlAgNewsHelper.cs b/New_Spider/HtmlAgNewsHelper.cs index 8a1dad8..ee07fa1 100644 --- a/New_Spider/HtmlAgNewsHelper.cs +++ b/New_Spider/HtmlAgNewsHelper.cs @@ -1,7 +1,10 @@ using HtmlAgilityPack; +using OpenQA.Selenium.Chrome; +using OpenQA.Selenium; using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Text; using System.Threading.Tasks; @@ -9,7 +12,7 @@ namespace New_Spider { public class HtmlAgNewsHelper { - public async void HtmlCreatePageData() + public void HtmlCreatePageData() { HtmlWeb webClient = new HtmlWeb(); HtmlDocument doc = webClient.Load("https://www.sdzk.cn/NewsList.aspx?BCID=2"); @@ -40,5 +43,54 @@ namespace New_Spider }); } + + + public void HtmlSpiderYangGuangData() + { + + // 初始化 Chrome 驱动 + var options = new ChromeOptions(); + // 如果需要,添加无头模式选项 + options.AddArgument("--headless"); + options.AddArgument("--no-sandbox"); + options.AddArgument("--disable-dev-shm-usage"); + String driverExecutableFileName = "chromedriver"; + String driverPath = "D:\\一草一木教育\\newgaokao\\New_Spider\\bin\\Debug\\net6.0\\"; + ChromeDriverService service = ChromeDriverService.CreateDefaultService(driverPath, driverExecutableFileName); + var driver = new ChromeDriver(service, options); + + // 导航到目标网页 + driver.Navigate().GoToUrl("https://gaokao.chsi.com.cn/news/zszc.do"); + + // 等待页面加载完成,包括动态内容 + Thread.Sleep(1000); // 这里使用简单的等待,更好的做法是使用 WebDriverWait + + // 获取动态内容 + var content = driver.FindElement(By.XPath("//*[@id=\"app\"]/div[2]/div[2]")); + + + // 也可以进一步获取子节点的子节点 + IReadOnlyCollection grandChildElements = driver.FindElements(By.XPath("//*[@id=\"app\"]/div[2]/div[2]/div[*]")); + foreach (IWebElement grandChildElement in grandChildElements) + { + var grandChild = grandChildElement.FindElement(By.TagName("span")); + var grandChildText = grandChild.Text; + var titletext= grandChildElement.FindElement(By.TagName("a")).Text; + var aurl= grandChildElement.FindElement(By.TagName("a")).GetAttribute("href"); + Console.WriteLine($"Grandchild Element Text: {grandChildText}"); + } + + // 关闭浏览器驱动 + driver.Quit(); + + // 打印动态内容 + Console.WriteLine(content); + + + } + } } + + + diff --git a/New_Spider/New_Spider.csproj b/New_Spider/New_Spider.csproj index df01b65..da74ab8 100644 --- a/New_Spider/New_Spider.csproj +++ b/New_Spider/New_Spider.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,6 +9,8 @@ + + diff --git a/New_Spider/Program.cs b/New_Spider/Program.cs index ea59bf0..f5c379c 100644 --- a/New_Spider/Program.cs +++ b/New_Spider/Program.cs @@ -11,8 +11,8 @@ using System.Text.RegularExpressions; //agMajorHelper.DownloadChildTypeListFile(); HtmlAgNewsHelper agNewsHelper = new HtmlAgNewsHelper(); -agNewsHelper.HtmlCreatePageData(); - +//agNewsHelper.HtmlCreatePageData(); +agNewsHelper.HtmlSpiderYangGuangData(); Console.Read(); // See https://aka.ms/new-console-template for more information