大学计算机网络体系结构课程Word格式文档下载.docx
- 文档编号:22251769
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:10
- 大小:103.12KB
大学计算机网络体系结构课程Word格式文档下载.docx
《大学计算机网络体系结构课程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大学计算机网络体系结构课程Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
首先添加public
class
ELFHashQueueAssignmentPolicy
extends
QueueAssignmentPolicy
然后在AbstractFrontiers中加入ELFHashQueueAssignmentPolicy.class.getName()
。
2修改order.xml更快
序号
配置名
理想值
说明
1
<
longname="
max-time-sec"
>
0<
/long>
3
抓取一个网页的最大时间(秒),超过了该时间则不抓取,0表示没有这个限制
2
integername="
max-toe-threads"
3<
/integer>
50
抓取的线程数,表示有多少个线程去抓取,一般50足够了
floatname="
delay-factor"
4.0<
/float>
1.0
如果从某个队列抓取一个URL花费N秒,则下次从该队列获取URL去抓取则要延迟N*该值
4
max-delay-ms"
20000<
2000
队列的最大延迟时间,单位为毫秒
5
min-delay-ms"
2000<
队列的最小延迟时间,单位为毫秒
6
max-retries"
30<
URL抓取失败可以重试的次数,重试次数越少越好
7
target-ready-backlog"
50<
200
准备队列中待抓取的URL个数,这些URL无需经过队列等待可以立刻去抓取
3修改代码解决乱码
4只抓去文本文件
解决方法就是添加一个rule,过虑掉非文本类型的文件从而节省抓取时间。
5修改ExtractorHTML输出URL图
因为最终进行统计与PageRank算法迭代需要输入的数据为图的邻接表表示结构,因此在抓取过程中能过同时输出URL的图结构将有助于数据统计工作的完成。
首先,定义输出的格式为如下:
URL1URL2URL4URL7URLi*****
URL1为当前的页面URL地址,之后为当前页面解析出来的URL地址,以上面结构排列一行为一个邻接表的一项,将所有URL按照上述格式输出就得到了所需的URL图结构。
然后,对Heritrix中ExtractorHTML进行修改,具体修改如下:
函数:
publicvoidextract(CrawlURIcuri)
中添加:
在函数:
protectedvoidprocessLink(CrawlURIcuri,finalCharSequencevalue,CharSequencecontext)中加入:
6统计URL图中的连接信息:
当获得URL图的结构之后,可以通过编写算法对网络的图结构进行统计,并将最终结果输出,通过PageRank算法的迭代可以得到网页的重要性排名。
PageRank算法核心代码如下:
floatpageRank[]=newfloat[total+1];
//存放临时重要性
floatprTmp[]=newfloat[total+1];
for(inti=1;
i<
=total;
++i)
{
pageRank[i]=1.0f/total;
prTmp[i]=0.0f;
}
//当前页面的PR值
floatfatherRank=1f;
floatalpha=0.85f;
//大体进行50次迭代,一中迭代的方法来求矩阵特征值
for(intiterator=0;
iterator<
50;
iterator++)
longstartTime=System.currentTimeMillis();
linkinput=newBufferedReader(newFileReader(linkfile));
line=linkinput.readLine();
//一次迭代;
对每一个元素,进行计算其贡献率
while(line!
=null)
//计算每个网页的出度
linesarr=line.split("
"
);
if(linesarr.length>
0)
outdegree=linesarr.length-1;
for(intj=1;
j<
=linesarr.length-1;
++j)
if(linesarr[j].equals(linesarr[0]))
outdegree--;
if(outdegree>
0)
father=(int)docIDandNum.get(linesarr[0]);
fatherRank=pageRank[father]/outdegree;
for(intk=1;
k<
++k)
if(linesarr[k].equals(linesarr[0]))
continue;
son=docIDandNum.get(linesarr[k]);
if(total>
=son&
&
son>
=0)
prTmp[son]+=fatherRank;
linesarr=null;
试验结果:
1抓取结果:
类型名
抓取数目
文本类(.asp.html.htm.txt)
26893个
图片类(.gif.jpg.ico)
8762个
文档类(.pdf.doc)
105个
其他(.ccs.rar等等)
234个
总计
35994个
表1最终抓取结果统计
2连接分析结果:
URL名称
出/入度
PageRank的权值
2/24055
0.0553333
47/24055
0.0533331
45/24054
0.0539478
76/24054
0.0528744
19/24052
0.0519876
13/24051
0.0497762
NewsID=1622&
BigClassName=CN&
SmallClassName=
%E6%88%91%E4%BB%AC%E7%9A%84%E8%81%94%E7%B3%B
B%E6%96%B9%E6%B3%95&
SpecialID=0
0/24049
0.0139219
8
49/568
0.0122392
9
49/408
0.0121348
10
39/208
0.0121227
表2排名前十的URL的结果分析
3判重机制与礼貌机制的分析结果:
1)判重机制
在类BdbFrontier中实现类四种过滤器分别为:
BdbUriUniqFilter
BloomUriUniqFilter
MemFPMergeUriUniqFilter
DiskFPMergeUriUniqFilter
BdbUriUniqFilter主要通过调用sleepcat中的API来实现查看URL数据中是否存在URL,MemFPMergeUriUniqFilter与DiskFPMergeUriUniqFilter主要用来合并文件,下面主要分析BloomUriUniqFilter中实现的判断方法:
BloomUriUniqFilter主要通过类BloomFilter32bitSplit来实现对URL的过滤的:
privatelonghash(finalCharSequences,finalintl,finalintk){
finalint[]w=weight[k];
inth=0,i=l;
while(i--!
=0)h^=s.charAt(i)*w[i%NUMBER_OF_WEIGHTS];
return((long)h-Integer.MIN_VALUE)%m;
}
该函数对每一个URL进行Hash求值,以便对已访问的URL进行标记
publicbooleancontains(finalCharSequences)
{
inti=d,l=s.length();
while(i--!
=0)if(!
getBit(hash(s,l,i)))returnfalse;
returntrue;
判断一个URL是否存在,如果存在只能在概率上认为已经存在,不能完全否定,如果不存在则可以确定不存在,可以直接加入到数据库,节省运算量。
publicbooleanadd(finalCharSequences)
{
booleanresult=false;
longh;
=0){
h=hash(s,l,i);
if(!
setGetBit(h))result=true;
}
if(result)size++;
returnresult;
每加入一个URL对该数值进行标定。
2)礼貌机制:
Heritrix中的礼貌机制有许多,只分析较为简单的一个,在AbstractFrontier中函数:
protectedlongpolitenessDelayFor(CrawlURIcuri){
longdurationToWait=0;
if(curi.containsKey(A_FETCH_BEGAN_TIME)
&
curi.containsKey(A_FETCH_COMPLETED_TIME)){
longcompleteTime=curi.getLong(A_FETCH_COMPLETED_TIME);
longdurationTaken=(completeTime-curi
.getLong(A_FETCH_BEGAN_TIME));
durationToWait=(long)(((Float)getUncheckedAttribute(curi,
ATTR_DELAY_FACTOR)).floatValue()*durationTaken);
longminDelay=((Integer)getUncheckedAttribute(curi,
ATTR_MIN_DELAY)).longValue();
if(minDelay>
durationToWait){
//waitatleasttheminimum
durationToWait=minDelay;
longmaxDelay=((Integer)getUncheckedAttribute(curi,
ATTR_MAX_DELAY)).longValue();
if(durationToWait>
maxDelay){
//waitnomorethanthemaximum
durationToWait=maxDelay;
longnow=System.currentTimeMillis();
intmaxBandwidthKB=((Integer)getUncheckedAttribute(curi,
ATTR_MAX_HOST_BANDWIDTH_USAGE)).intValue();
if(maxBandwidthKB>
0){
//Enforcebandwidthlimit
CrawlHosthost=controller.getServerCache().getHostFor(curi);
longminDurationToWait=host.getEarliestNextURIEmitTime()
-now;
floatmaxBandwidth=maxBandwidthKB*1.024F;
//kilofactor
longprocessedBytes=curi.getContentSize();
host.setEarliestNextURIEmitTime((long)(processedBytes/maxBandwidth)
+now);
if(minDurationToWait>
durationToWait=minDurationToWait;
returndurationToWait;
先通过获取一次网页的时间计算要等待的时间durationToWait,然后与设定的最大延迟、最小延迟、带宽延迟进行比较,来判断合适的延迟时间,以免过于频繁的访问一个服务器造成过大压力。
胡钊闫应威王超:
网页抓取
霍佳森:
代码分析网页统计代码实现报告书写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 计算机网络 体系结构 课程