很早之前就想把一个网站上的图片下载下来,以前用的工具,非常流畅,但是有些图片是链接到别的网站,所以下载不下来,就想到自己开发一个,可惜后来俗事缠身,百忙不的闲,也就忘记了,最近手头不是很忙,就起了这个念头,说到爬虫,一般的想法是把整个网页下载下来,然后用正则把无关的东西去掉,然后用程序判断,获取相关链接,然后逐个下载,大致如此。
然而在写的过程中,发现这样实在是麻烦,要分析页面建构,哪些想要,哪些要判断,很麻烦,在网上查了一下,发现一个神器HtmlAgilityPack,这个工具可以把整个网页获取下来,形成XML架构,只要使用XPATH就可以获取相关的一切内容,如果想获取页面下div为content 下的所有链接,只要 DocumentNode.SelectNodes("// div [@id='content']/a");
就可以了,相当方便。
获的了文件的所有列表,下面就要开发下载了,C#的网络下载,封装的最好是WebClient,好,那就开始吧,下载个百十来张,没有问题,把页面最小化,下载开始吧,过了一会把程序打开一看,这货居然不干活,死掉了。是的,不停的下载,神仙也降不住啊,原谅,加个多线程吧。
好嘛,又开始疯狂的下载了,然而,不一会程序居然自己关掉了,出了什嘛问题,一看,居然是无洗联接到服务器,连接超时,这时暗骂自己粗心,必须的设啊,可是把这货属性翻了个遍,居然没有熟悉的TIMEOUT,百度一下,我靠,居然没有这个属性,哪个昨整啊,这时只有两个选择,要么是换成httprequest,要么是在webclient基础上加上这个属性,ref了WebClient类,看到下载文件
那就重写你了,OK,另外发现下载超慢,原来webclient默认下载并发是2,改成ServicePointManager.DefaultConnectionLimit = 512;下载突突的