欢迎来到天天文库
浏览记录
ID:17583969
大小:653.00 KB
页数:19页
时间:2018-09-03
《多线程网页抓取程序的分析与改进》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、GetWeb类源代码分析通过对程序代码分析,绘制程序执行流程概要如下:详细功能流程图如下(为了便于理解程序执行过程,流程图中的变量标识与源代码中的变量名并不对应):-18-u详细功能流程图中变量标识与源代码中变量名的对应关系:流程图中的变量源程序中的变量数据类型(java)描述startURLstrHomePageString主页地址unProcessURLsarrUrlsArrayList未处理URL集合maxDeepwebDepthint最大爬虫深度DxxxURLdeepUrls中的value值int某URL的深度值threadNum创建抓取线
2、程时的循环变量iint循环变量imaxThreadintThreadNumint最大线程数uGetWeb类的主要字段和方法的功能概述字段摘要java.util.HashtableallUrls存储所有URL的编号java.util.ArrayListarrUrl存储所有URL供建立索引java.util.ArrayListarrUrls存储未处理的URLjava.lang.Stringcharset字符集,默认为GB2312j
3、ava.util.HashtabledeepUrls存储URL的爬虫深度java.lang.StringfPath储存网页文件的目录名,默认为webintintThreadNum最大线程数,默认为10intintWebIndex网页文件对应下标,从0开始java.lang.StringmyDomain主页地址中的域名java.lang.Stringreport网页抓取报告longstartTime抓取开始时刻java.lang.StringstrHomePage主页地址,即起始URLintwebD
4、epth爬虫深度,默认为2intwebFailed抓取失败的URL计数intwebSuccessed抓取成功的URL计数方法摘要voidaddReport(java.lang.Strings)生成报告文件,将内容s添加到报告文件中(多线程同步操作)voidaddWebFailed()抓取失败URL计数(多线程同步操作)voidaddWebSuccessed()抓取成功URL计数(多线程同步操作)java.lang.StringgetAUrl()从未处理URL集合中取一个URL,并将这个URL从未处理URL集合中删除(多线程同步操作)java.lang.Stringge
5、tDomain()判断用户所提供URL是否为域名地址java.lang.IntegergetIntWebIndex()生成一个新的网页文件下标(多线程同步操作)java.lang.StringgetUrl()从所有URL集合中取一个URL,并将这个URL从所有URL集合中删除(多线程同步操作)voidgetUrlByString(java.lang.StringinputArgs,java.lang.StringstrUrl)提取网页文本中的URL链接(解析新的网页,提取其中含有的链接信息)-18-voidgetWebByHomePage()由用户提供的域名站点开始,
6、对所有链接页面进行抓取voidgetWebByUrl(java.lang.StringstrUrl,java.lang.Stringcharset,java.lang.StringfileIndex)抓取URL的网页文本并从中提取URL链接(对后续解析出的url进行抓取)程序运行时,根据用户输入的主页地址和最大爬虫深度调用getWebByHomePage方法,首先将主页URL添加到arrUrl和allUrls队列中,为其分配初始编号0,并设置爬虫深度为1;然后调用getWebByUrl方法抓取主页内容,将其存入网页文件中,同时从抓回的网页文本中提取链接(使用getUr
7、lByString方法)存入arrUrls队列和arrUrl队列中。同时在allUrls队列中为每个URL分配一个网页编号,在deepUrls中添加并设置每个URL的爬虫深度(父链接爬虫深度+1,这里为1+1=2)。接下来,循环创建10个抓取线程开始网页抓取。网页抓取线程不断从arrUrls队列中取出链接,抓取其网页内容。接着判断网页爬虫深度若大于最大爬虫深度则继续从arrUrls中取新的URL进行抓取,否则,要从刚刚抓取到的网页文本中提取链接,存入arrUrls队列和arrUrl队列,在allUrls队列中为每个URL分配网页编号,在deepUrl
此文档下载收益归作者所有