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();//彻底退出该浏览器
}

这样你每次调用的时候,就只需要调用改变读取网页就行了,不需要等待浏览器开关。在爬取多个网页的时候的速度就能够有很多倍的提升。

下面还有一个更加惊爆的提速方法在等着大家,这个方法,只要你硬件网速跟得上,这个速度有能提高十倍。如果想要知道,就在下面留言,没错,我就是看到一直没人评论,不爽了想看看有没有想知道。
好吧!已经发了,仅粉丝可见!

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值