• 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;
    }
  • 相关阅读:
    电信的星空极速客户端软件强制安装策略升级了
    CSS 控件适配器工具包对事件处理的 Bug 以及修正办法
    IronPython 源码剖析系列(1):IronPython 编译器
    对 CSS 控件适配器处理事件的 Bug 进一步修正
    明天去长春出差。。。
    Windows 系统右键菜单假死问题解决一例
    使用 Anthem.NET 的常见回调(Callback)处理方式小结
    TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
    ASP.NET Web开发框架之六 数据库文档方法,工具和实践
    推荐功能强大的ORM Profiler,ORM问题追踪的利器
  • 原文地址:https://www.cnblogs.com/my1227/p/13534861.html
Copyright © 2020-2023  润新知