用C#实现网络爬虫的方法_第1页
用C#实现网络爬虫的方法_第2页
用C#实现网络爬虫的方法_第3页
用C#实现网络爬虫的方法_第4页
用C#实现网络爬虫的方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络爬虫在信息检索与处理中有很大的作用,是收集网络信息的重要工具。接下来就介绍一下爬虫的简单实现。爬虫的工作流程如下爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止。下面开始逐步分析爬虫的实现。1. 待下载集合与已下载集合为了保存需要下载的URL,同时防止重复下载,我们需要分别用了两个集合来存放将要下载的URL和已经下载的URL。因为在保存URL的同时需要保存与URL相关的一些其他信息,如深度,所以这里我采用了Dictionary来存放这些URL。具体类型是Dictionary其中string是Url字符串,int是该Url相对于基URL的深度。每次开始时都检查未下载的集合,如果已经为空,说明已经下载完毕;如果还有URL,那么就取出第一个URL加入到已下载的集合中,并且下载这个URL的资源。2. HTTP请求和响应C#已经有封装好的HTTP请求和响应的类HttpWebRequest和HttpWebResponse,所以实现起来方便不少。为了提高下载的效率,我们可以用多个请求并发的方式同时下载多个URL的资源,一种简单的做法是采用异步请求的方法。控制并发的数量可以用如下方法实现1 private void DispatchWork()2 3 if (_stop) /判断是否中止下载4 5 return;6 7 for (int i = 0; i _reqCount; i+)8 9 if (!_reqsBusyi) /判断此编号的工作实例是否空闲10 11 RequestResource(i); /让此工作实例请求资源12 13 14 由于没有显式开新线程,所以用一个工作实例来表示一个逻辑工作线程1 private bool _reqsBusy = null; /每个元素代表一个工作实例是否正在工作2 private int _reqCount = 4; /工作实例的数量每次一个工作实例完成工作,相应的_reqsBusy就设为false,并调用DispatchWork,那么DispatchWork就能给空闲的实例分配新任务了。接下来是发送请求1 private void RequestResource(int index)2 3 int depth;4 string url = ;5 try6 7 lock (_locker)8 9 if (_urlsUnload.Count 0)22 23 MemoryStream ms = new MemoryStream(rs.Data, 0, read); /利用获得的数据创建内存流24 StreamReader reader = new StreamReader(ms, _encoding);25 string str = reader.ReadToEnd(); /读取所有字符26 rs.Html.Append(str); / 添加到之前的末尾27 var result = resStream.BeginRead(rs.Data, 0, rs.BufferSize, /再次异步请求读取数据28 new AsyncCallback(ReceivedData), rs);29 return;30 31 html = rs.Html.ToString();32 SaveContents(html, url); /保存到本地33 string links = GetLinks(html); /获取页面中的链接34 AddUrls(links, depth + 1); /过滤链接并添加到未下载集合中3536 _reqsBusyindex = false; /重置工作状态37 DispatchWork(); /分配新任务38 39 catch (WebException we)40 41 MessageBox.Show(ReceivedData Web + we.Message + url + we.Status);42 43 第14行获得了读取的数据大小read,如果read0说明数据可能还没有读完,所以在27行继续请求读下一个数据包;如果read=0说明所有数据已经接收完毕,这时rs.Html中存放了完整的HTML数据,就可以进行下一步的处理了。来源: 萍客小居 | http

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论