C#使用selenium寫爬蟲提高速度的關鍵

這段時間一直在搞爬蟲,學了一段時間之後,最後還是使用的selenium模擬瀏覽器來進行爬取。
就來記錄一下自己踩的坑。一開始在網上找提升selenium爬蟲速度的方法,都是說什麼多線程,關閉圖片讀取之類的。當然我也貼一個關閉圖片讀取的代碼,畢竟還是挺有用的。

var  options = new FirefoxOptions();
 options.SetPreference("permissions.default.image", 2);//無圖
 var driver = new FirefoxDriver(options);

接下來就是自己總結出來的乾貨了。
首先你如果想要提高速度,就一定不能使用每次爬取一個頁面就要打開一個瀏覽器,然後關閉的方式。對,在c#中每new一個driver,就是打開了一個瀏覽器,而打開瀏覽器的時間花費很長,並且徹底關閉也要花時間。代碼如下:`

void craw(stirn url)
{
  var options = new FirefoxOptions();
 options.SetPreference("permissions.default.image", 2);//無圖
 FirefoxDriver  driver = new FirefoxDriver(options);//這裏的new一個對象就是在打開一個瀏覽器,很費時間
 driver.Url=url;//讀取網址
 Console.WriteLine(driver.Title);//你對網址的操作,我就是輸出了一下標題
 driver.Quit();//徹底退出該瀏覽器
 }

這個函數,每調用一次就是在打開一個瀏覽器,如果多線程執行,就是不斷的同時打開多個瀏覽器,並且耗時間和內存。

然後我當時想到了一種思路就是,我先創建創建好一個瀏覽器,不關閉,然後直接改變他的url,這樣提升起來的速度就是快了近10倍。上面的代碼一分鐘能爬200個左右的網站,還是開了五個瀏覽器同時在跑的結果。而下面的方法也是五個瀏覽器,卻能一小時大概3000條左右。

FirefoxDriver driver=null;
void initialize()
{
var  options = new FirefoxOptions();
 options.SetPreference("permissions.default.image", 2);//無圖
 driver = new FirefoxDriver(options);//這裏的new一個對象就是在打開一個瀏覽器,很費時間
}
void craw(string url)
{
 driver.Url=url;//讀取網址
 Console.WriteLine(driver.Title);//你對網址的操作,我就是輸出了一下標題
 driver.Quit();//徹底退出該瀏覽器
}

這樣你每次調用的時候,就只需要調用改變讀取網頁就行了,不需要等待瀏覽器開關。在爬取多個網頁的時候的速度就能夠有很多倍的提升。

下面還有一個更加驚爆的提速方法在等着大家,這個方法,只要你硬件網速跟得上,這個速度有能提高十倍。如果想要知道,就在下面留言,沒錯,我就是看到一直沒人評論,不爽了想看看有沒有想知道。
好吧!已經發了,僅粉絲可見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章