C#爬蟲(Selenium和WeiAPI)

目前對網頁的爬蟲一個是對網頁直接爬取數據和WeiAPI的方式爬取,這取決於網址用的何時渲染的數據,而後展現在網頁中。html

首先咱們對某一個網址準備爬取數據時候,你須要去研究這個網址是後臺給前臺是數據仍是網頁,這個時候我推薦 Fiddler 或者Fiddler.exe 和  postman  這兩個軟件進行研究,具體安裝方式和使用方式可百度,有不少的教程;若是你不想下載,那在瀏覽器中按住 F12,而後以下圖web

 

 

  若是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

 

 

 二、webAPI 瀏覽器

  若是Response是這種,這後臺採用的是WebAPI的方式,這個時候咱們去Headers裏面看看,RequestURL就是WebAPI的方法,而FormData就是參數,把URL和參數拼接一塊兒便可獲得數據,而後獲取數據便可,代碼以下。app

 

 

 

 

 

 

 

 

 

 

 

 

 

 WebAPI代碼less

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; }
相關文章
相關標籤/搜索