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"));//这里是获取元素里面的内容 然后数据里面可能会有\n\t &nbsp;等字符,我们需要把他给替换  可以使用Replace

2、webAPI

如果Response是这种,这后台采用c#教程的是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;
 }
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值