一般的http請求庫只能夠抓取到網頁的靜態內容,如果想抓取通過js動態生成的內容可以使用沒有gui的browser庫,之前許多人會使用phantomjs作為headless browser,不過現在phantomjs團隊已經宣布停止更新工作,需要一款替代庫,於是這里就采用了headless chrome來進行動態網頁內容抓取。
爬蟲實現如下:
1.在.net core項目中引用如下nuget包
Selenium.WebDriver
Selenium.WebDriver.ChromeDriver
注意:引用Selenium.WebDriver.ChromeDriver后,會在代碼目錄中copy出chromedriver.exe文件,exe文件只能運行與windows平台下,所以我們需要去網站(http://chromedriver.storage.googleapis.com/index.html)下載當前最新的chromedriver程序linux版,並將程序添加到項目中,屬性設置為復制到輸出目錄。這樣導出的程序才可以在linux和windwos平台下都正常運行。
注意2:爬蟲的宿主服務器中需要安裝和chromedriver一致版本的chrome版本(兩個都安裝最新版就可以)
2.爬蟲代碼
class Program { static void Main(string[] args) { ChromeOptions op = new ChromeOptions(); op.AddArguments("--headless");//開啟無gui模式 op.AddArguments("--no-sandbox");//停用沙箱以在Linux中正常運行 ChromeDriver cd = new ChromeDriver(Environment.CurrentDirectory, op,TimeSpan.FromSeconds(180)); cd.Navigate().GoToUrl("http://chart.icaile.com/sd11x5.php"); string text = cd.FindElementById("fixedtable").Text; cd.Quit(); Console.WriteLine(text); Console.Read(); } }