C#使⽤selenium写爬⾍提⾼速度的关键
这段时间⼀直在搞爬⾍,学了⼀段时间之后,最后还是使⽤的selenium模拟浏览器来进⾏爬取。
就来记录⼀下⾃⼰踩的坑。⼀开始在⽹上提升selenium爬⾍速度的⽅法,都是说什么多线程,关闭图⽚读取之类的。当然我也贴⼀个关闭图⽚读取的代码,毕竟还是挺有⽤的。
var  options = new FirefoxOptions();
options.SetPreference("permissions.default.image", 2);//⽆图
var driver = new FirefoxDriver(options);
接下来就是⾃⼰总结出来的⼲货了。
⾸先你如果想要提⾼速度,就⼀定不能使⽤每次爬取⼀个页⾯就要打开⼀个浏览器,然后关闭的⽅式。对,在c#中每new⼀个driver,就是打开了⼀个浏览器,⽽打开浏览器的时间花费很长,并且彻底关闭也要花时间。代码如下:`
selenium怎么使用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();//彻底退出该浏览器
}
这样你每次调⽤的时候,就只需要调⽤改变读取⽹页就⾏了,不需要等待浏览器开关。在爬取多个⽹页的时候的速度就能够有很多倍的提升。
下⾯还有⼀个更加惊爆的提速⽅法在等着⼤家,这个⽅法,只要你硬件⽹速跟得上,这个速度有能提⾼⼗倍。如果想要知道,就在下⾯留⾔,没错,我就是看到⼀直没⼈评论,不爽了想看看有没有想知道。
好吧!已经发了,仅粉丝可见!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。