关于如何对目标系统爬数据

最近公司的产品需要把客户在医院体检的数据抓到自己的系统上来,这样客户直接可以在产品上看到体检数据,这里需要客户在体检中心的账号。

首先使用账号对目标系统进行登录,然后看请求接口以及返回的数据,根据这些信息一些系统可以使用开发语言直接就可以获取数据以及token密钥什么的,但有部分系统做了https证书双向验证,无法请求到他们的接口,然后采取使用谷歌插件chromedriver,通过代码来模拟登录已经获取所需要的数据,这里需要用到XPATH来解析页面代码,从而控制谷歌进行操作。

   // 设置ChromeDriver路径,根据您下载的ChromeDriver的实际路径进行设置
            var chromeDriverPath = @"chromedriver.exe";

            // 创建ChromeDriver实例
            var options = new ChromeOptions();
            options.AddArgument("--start-maximized"); // 启动时最大化浏览器窗口

            IWebDriver driver = new ChromeDriver(chromeDriverPath, options);
            // 导航到登录页面
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
            driver.Navigate().GoToUrl(@"https://www.js123brtj.com/health-manage-sys/#/hr/login");


            IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver;
            // 获取响应内容,即登录后的页面源码
            var responseBody1 = driver.PageSource;


            var enterpriseBtn = driver.FindElements(By.ClassName("mu-tab"))[1];
            enterpriseBtn.Click();


            var a = driver.FindElements(By.ClassName("mu-text-field-input"));
            a[0].SendKeys("111");
            a[1].SendKeys("222");


            //先是把下拉款拉出来
            driver.FindElement(By.ClassName("mu-select")).Click();

            //选择哪家公司
            var asdaa = driver.FindElement(By.ClassName("mu-list-dense")).FindElements(By.XPath("//a"))[1];
            asdaa.Click();

            //点击登录
            driver.FindElement(By.ClassName("mu-button")).Click();



            Thread.Sleep(3000);

            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);


            //职业体检
            driver.Navigate().GoToUrl($"https://www.js123123br12tj.com/health-manage-sys/#/cr/uep?utregsn=0100002535&bh=0001&pdf=");
            Thread.Sleep(3000);

            driver.FindElement(By.ClassName("layui-table-body")).FindElements(By.XPath("//tr//a"))[0].Click();
            Thread.Sleep(3000);

            driver.FindElement(By.TagName("button")).Click();

            Thread.Sleep(3000);

            driver.FindElement(By.TagName("img")).Click();
            //点击下一页如果没有数据就停止
            //driver.FindElement(By.ClassName("layui-laypage-next")).Click();

然后有部分体检数据是用pdf文件显示的,需要把pdf解析成html,做了相关的资料查询,发现一个比较简单的库IronPdf,这个只要几行代码就可以实现了。

 #region PDF转html
            var pdfFile = @"C:\Users\SRFSD\source\repos\ConsoleApp4\3231012025查华.pdf";
            var htmlFile = @"C:\Users\SRFSD\source\repos\ConsoleApp5\HTMLPage1.html";
            //iTextSharp和PdfSharp不能用,因为是提取文本和图片得自己拼装成html
            //PdfSharp和HTMLRenderer.PdfSharp也不行
            //PdfToHtmlNet(不行,需要安装Python,不然报错)
            //Aspose.HTML for .NET以及TallComponents PDFRasterizer(不行)
            //SelectPdf(基于SelectPdf进行PDF转换为HTML的操作相对较为复杂,SelectPdf主要用于将HTML转换为PDF。如果你需要将PDF转换为HTML,可以尝试使用其他库)
            //EO.Pdf/GemBox.Pdf/PDF Clown不行
            //Syncfusion Essential PDF以及Spire.PDF收费

            // 加载PDF文件
            PdfDocument pdfDocument = PdfDocument.FromFile(pdfFile);

            // 将PDF转换为HTML
            string htmlContent = pdfDocument.ToHtmlString();

            #endregion

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值