zoukankan      html  css  js  c++  java
  • C#爬虫(Selenium和WeiAPI)

    目前对网页的爬虫一个是对网页直接爬取数据和WeiAPI的方式爬取,这取决于网址用的什么时候渲染的数据,然后展示在网页中。

    首先我们对某一个网址准备爬取数据时候,你需要去研究这个网址是后台给前台是数据还是网页,这个时候我推荐 Fiddler 或者Fiddler.exe 和  postman  这两个软件进行研究,具体安装方式和使用方式可百度,有很多的教程;如果你不想下载,那在浏览器中按住 F12,然后如下图

      如果Response里面是一个HTML,那说明这个不是WebAPI的方式,这个时候你就得选择网页爬虫,在C#NuGet里面添加 以下几个

    ChromeOptions options = new ChromeOptions();        
      // 不显示浏览器
     options.AddArgument("--headless");
     // GPU加速可能会导致Chrome出现黑屏及CPU占用率过高,所以禁用
     options.AddArgument("--disable-gpu");
     //禁用浏览器的保存密码选项
     options.AddUserProfilePreference("credentials_enable_service", false);
     options.BinaryLocation = webClientUrl;
      IWebDriver driver = new ChromeDriver(options);
    //进入的网址
     driver.Navigate().GoToUrl(LoingUrl);//LoingUrl 就得需要连接的地址
    // 设置页面加载时间
    driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(2000);
    driver.FindElement(By.Id("txtUsername")).SendKeys(userName);                
    driver.FindElement(By.Id("txtPassword")).SendKeys(userPassword);
    driver.FindElement(By.Id("imgBtnSignIn")).Click();
    driver.Navigate().GoToUrl(listUrl);//需要获取数据的地址
    var _trselector = driver.FindElements(By.CssSelector("这里是你需要获取数据的Clss或者ID对应的名称"));// 定位到表格下的每一个tr的数据  
    比如<div id="test_id"><div class="test">--------------</div></div> 那就是 by.CssSelector("#test_id .test")
    HtmlDocument htmlDocument = new HtmlDocument();//初始化一个HTMLDocument对象 htmlDocument.LoadHtml(_trselector .GetAttribute("innerHTML"));//这里是获取元素里面的内容 然后数据里面可能会有 &nbsp;等字符,我们需要把他给替换 可以使用Replace

     2、webAPI

      如果Response是这种,这后台采用的是WebAPI的方式,这个时候我们去Headers里面看看,RequestURL就是WebAPI的方法,而FormData就是参数,把URL和参数拼接一起即可得到数据,然后获取数据即可,代码如下。

     

     WebAPI代码

    public void  GetData(){
          CookieContainer httpCookie = DoLogin(UserName, Password);
         if (httpCookie == null)    return;//登录是否成功
         //获取WebApi的数据
          string result_CIS = GetCISList(CISURL, httpCookie);
            ……………………这里就是对获取的数据进行处理解析
    }   
    private CookieContainer DoLogin(string username, string password, string LoginURL)
    {
    var client = new RestClient(LoginURL); var request = new RestRequest(Method.POST); //UserName=OECSHA&Password=Oecsha123!&OfficeCode= request.AddParameter("application/x-www-form-urlencoded", $"UserName={username}&Password={password}&OfficeCode=", ParameterType.RequestBody); client.CookieContainer = new System.Net.CookieContainer(); IRestResponse response = client.Execute(request); if (!response.IsSuccessful) return null; return client.CookieContainer; } private string GetCISList(string cISURL, CookieContainer httpCookie) { var client = new RestClient(cISURL+ "参数"); var request = new RestRequest(Method.POST);//采用的方式 client.CookieContainer = httpCookie; IRestResponse response = client.Execute(request); if (!response.IsSuccessful) return null; return response.Content;
    }
  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/my1227/p/13534861.html
Copyright © 2011-2022 走看看