宁波seoesball提款:原始网页的处理

发布时间:2018-09-22 18:49

  Ihttp://localhost:8080/index,jsp
  链接
  AdminConsole
  Statusasof??17,200809:0810GMTAleits:3CRAWLINGJOBSRUNNINGjob:mysearch0jobspending,2gpmpletej1019URIsin6m49s(2.35/sec)JobsProfilesLogsReportsSetupHelp
  CrawlerStatus:CRAWLINGJOBS|HoldJobsRunning:mysearch0pending,2completed

原始网页的处理的图片200

  Alerts:3
  JobStatus:RUIWING|Psuss|Checkpoint|Terminate+Rates2.35URIs/sec(2.49avg)
  KB/scc

原始网页的处理的图片208

  Time
  m49selapsed
  ml8sremaining
  Totals
  downloaded10If
  Memory
  KBused28400KBcurrentheap:65088KBmaxhe^pLoad

原始网页的处理的图片205

  activeof100threads1.0congestionratio752deepestqueue273averagedepthijhttp://localKost:8080/index,jsp
  ^/o
  totaldownloadedandqueued19MBuncompresseddatareceived12732queued
  '
  M本*In.tr
  图8-67Heritrix运行界面

原始网页的处理的图片196

  待抓取完毕后,在Heritrix下会生成一个jobs文件夹,打开后有一个11178631’(:112008****的文件夹,这就是刚才设置的抓取任务,它的命名方式为设置的抓取任务名加上启动任务的时间,打开后可以看到如图8-68所示的目录结构。
  图8-68抓取任务目录结构
  Mirror文件夹下保存的是抓取的网页,如图8-69所示。
  图8-69抓取结果
  路径名为网页所对应的URL,了解这点对于进行网页预处理工作有很重要的意义。接下来进人下一部分——预处理。
  O囫冠彌领画
  Heritrix将网页抓取下来后,并没有对网页进行任何的修改,因此网页源码中还包含着大量的HTML标签,这些都是没有价值的信息,网页预处理的功能就是要从网页源码中提取出有用的信息,保存起来,并为将来建立索引所用。
  原始网页的处理

原始网页的处理的图片198

  网页中信息的重要性要视具体需要而定,一般来说,简单的捜索引擎会将网页中的文本部分全部提取出来作为信息,一些髙级的搜索引擎还会过滤掉这些信息中的广吿内容。原始网页的处理目的是将网页中的无关的HTML标签过滤,只取出有用的信息,过滤广告,按照某一格式重新存储网页的内容。现在只是将HTML标签进行过滤。
  网页中的文本内容一般会在<DIV〉、<TD>等标签当中,另外超链接标签<A〉中也会包含一些重要的信息,因此,在过滤的时候要首先识别是哪一?类的标签,然后再有选择地进行过滤。Htmlparser是一个开源的标签过滤包,利用Htmlparser提供的一些方法,可以将网页中的各种标签以结点的方式表现出来,并能从中获取结点的各项属性和信息。
  首先,构造一个用来表示处理后的网页模型类Page,代码如下:
  packagecn.edu.bj£u.search.page;*
  publicclassPage{
  privateStringurl;privateStringtitle;privateStringsummary;privateStringcontext;privateintscore;publicPage(){url=*null;titlesnull;summary=null;context=null;score=10;}
  publicStringgetUrl(){returnthis.url;publicvoidsetUrl{
  ,thia.url*url;
  }
  publicStringgetTitle(){returnthis.title;}
  publicvoidsetTitle{this.title=title;}
  publicStringgetSummary(){cetumthis.summary;}
  publicvoidsetSttfnmary(Stringsummary“this.sinwary=?summary;
  publicStringgetContext(){cetuxnthis.context;}
  publicvoidSetContext{this,context^context;}
  publicJLntgetScore(){cetucnthis.score;}
  publicvoidsetScore{this.score=score;}
  }
  各个属性的意义已在注释中表明,具体的代码实现参照附带的示例程序。Page类要做的事情就是保存处理后的网页,宁波seoesball提款并被其他控制类来调用,例如负责存储的类。
  接下来看解析器类。解析器类的作用是解析原始网页,提取有用的信息。由于HTML没有像XML那样严格的语法限定,所以简单地用Java中的Pattern和Match类来过滤标签会有一些困难,因此本实例采用了第三方的开源包htmlparse来作为解析工具。
  在eclipse下新建一个JavaProject,取名叫Preprocess,如图8-70所示。
  图8-70新建工程Preprocess
  建立好后,单击Preprocess前边的+号图标,展开文件夹,看到一个,JRESystemLibrary,如图8-71所示。
  将鼠标移动到图8-71所示的运行库上,右键单击并在弹出菜单下选择BuildPathlConfigureBuildPath…,如图8-72所示。
  Java-EclipsePlatform
  El回gi
  £ile£ditSourceRefactorHavigateSearchProjectRunVindow}{elp门,帑,O,;忐锴级,房JgEE1fep'',I*>,。'
  JBESystemLibrary[jrel.6.0]-Pr?proc?ss图8-71所需要的运行库
  图8-72配置BuildPath

原始网页的处理的图片201

  右键单击Preprocess,在弹出的菜单中选择BuildPath|ConfigureBuildPath,弹出PropertiesofPreprocess窗口,选择Libraries选项卡,单击右边的AddExternalJARs…按钮,添加htmlparser.jar到项目工程Preprocess下,如图8-73所示。
  单击OK按钮。现在就可以使用htmlparser中提供的解析网页的类了。
  新建一个类,名字叫做Page,package名取为cn.edu.bjfu.search,page(这个名字可以自定义,具体格式参照Java包命名规则),如图8-74所示。
  PropertiesforPreprocess
  BE
  图8-73添加htmlparser
  图8-74新建Page类
  在图8-74中单击Finish按钮,出现图8-75所示的画面。在Page,java类中输入如下的代码:
  packagecn.edu.bjfu.search.page;publicclassPage{privateStringurl;privateStringtitle;privateStringsummary;pcivateStringcontext;privateintscore;pdblicPage(){图8-75Page,java类输人窗口
  url=null;title-null;summary^null;context=null;score=10;}
  publicStringgetUrl(){returnthis.url;}
  publicvoidsetUrl{thia.url=url;}
  publicStringgetTitle(){returnthis.title;}
  publicvoidsetTitle{Stringtitle)。{this,title-title;}
  publicStringgetSummary(){returnthis.smranary;}
  publicvoidsetSummary{this.summary=summary;}

原始网页的处理的图片202

  publicStringgetContext(){returnthis,context;};publicvoidSetContext{this,context35context;
  }
  publicintgetScore(){returnthis.score;}
  publicvoidsetScore{this.score=score;}
  }
  按照同样的步骤,再新建一个类Extractor,package敢名力cn.edu.bjfu.searchextractor,Extractor的全部代碍如下:
  packagecn.edu.bjfu.search.extractor;inportorg.htmlparser.*;

原始网页的处理的图片204

  uqpoctorg.htmlparser.util.*;
  inportorg.htmlparser.visitors.*;
  importorg.htmlparser.nodes.*;
  ijqportorg.htmlparser.tags.*;
  importcn.edu.bjfu.search.page.*;
  iaporhcn.edu.bjfu.search.util.*;
  publicclaa番ExtractoriiopleraantsRunnable{privateStringfilename;privateParserparser;pcivatePagepage;privateStringencode;publicvoidsetEncode{this.encode=encode;}
  privateStringcornbineNodeText(Node[]nodes){StringBufferbuffer-newStringBuffer();for(Inti=0;i  Stringline=null;
  if(anodeinstanoeofTextNodej{

原始网页的处理的图片203

  TextNodetextnode=anode;line=textnode.getText();}
  elseif{
  LinkTaglinknode=anode;line?linknode.getLinkText();}
  lseif{

原始网页的处理的图片197

  If(anode.getChildren()'-null){
  line=coinbineNodeText(anode.getChildren().toNodeArray());}
  elseif{if(anode.getChildren()!=nuXl){line-combineNodeText(anode.getChildren()。toNodeArray());}
  }
  elseif{
  if(anode.getChildren{)!=nulX){
  line-combineNodeText(anode.getChildren().toNodeArray());}
  }?
  elseif{if(anode.getChildren()!==null){line=combineNodeText(anode.getChildren().toNodeArray());}
  }
  elseif{if(anode.getChildren()!=null){line篇combineNodeText(anode.getChildren()-toNodeArray());}
  }
  elseif{if(anode.getChildren()!=mall){line:combineNodeText(anode.getChildren().toNodeArray());}
  }
  if(line!-null){buffer,append;}
  }
  cetuxnbuffer.toStringO;
  }
  privateStringgetUrl{Stringurl=filename;
  url=url.replace(ProperConfig.getValue(”mirror.path“)+”/mirror“,;if(url.lastIndexOf<''/”)==url.length()-1){url=url.substring(0,url.length()-1);}‘ur1=url.substring⑴;
  returnurl;
  }
  privateintgetScore(Stringurl,Intscore){String[]sxibStr=url.split(“/”);score=score-(subStr.length-1);mtuznscore;}
  privateStringgetSummary{if(context==null){context-“”;
  }
  cetuxnMD5tMD5Encode;
  }
  publicvoidextract{System,out.printIn(“Message:Nowextracting”+filename);this.filename番filename.replace(“\\”,run();
  if(this.page!^null){
  PageLib.store(this.page);
  }
  }
  publicvoidrun(){try{
  parser=n?rParser(this.filename);parser.setEncoding;HtmlPagevisitor=iwwHtmlPage;parser.visitAHNodesWith;page=mtntPage();//获取网页的URL
  this.page.setUrl(getUrl(this.filename));'
  //获取网页的标题'
  this,page.setTitle(visitor.getTitleO);//验证网页<body>标签内是否为空,郎果是空则不用进行内容提取if(visitor.getBodyO^-null){this.page.SetContext;
  }
  elM{

原始网页的处理的图片206

  //如果不为空,则提取内容
  thia.page.SetContext(combineNodeText(visitor.getBody()?toNodeArray0));}
  //计算网页的得分
  this.page.setScore(getScore(this.page.getUrl(),this.page.getScore()));//计#网页的摘要thia.page.setSummary(getSummary(thi?.page.getContext0));}
  catch{
  this,page篇null;
  printStackTrace();
  System,out.printing''Continue…“
  这里对Extractoi?做一个简要的解释。Extractor类中的第一属性filename是用来保存当前要解析的网页的路径;parser是一个Parser类的对象,Parser包含在htmlparser当中,它的作用就是解析;Page是之前定义的Page类的对象;encode是一个String对象,用来保存网页的编码,方便parser进行解析。Extractor继承了Runnable接口,因此,要重载run()方法,其中combineNodeTextO方法是自己定义的。
  parser对象可以将网页划分成不同层次的元素集合,有点类似于XML,而combineNodeTexK)方法通过递归来解析网页中的各个层次的元素,而网页的内容会出现在parser划分的文本结点,用TextNode对象来表示一个文本结点。当解析到的是文本结点,则读取其内容;再有,如果是链接结点,其中也会包含一些有用的内容,因此,当遇到结点为链接结点也要提取内容。如果遇到的是层结点或者类似的标结点则需要递归,因为这一类的结点会包含子结点,而子结点很可能是个文本结点。在反复不断的递归后,就能将网页的文本内容提取出来了。
  当然,这种算法的效率不高,本实例测试了约19OpO个网页的解析,耗时超过了10分钟,算法效率可提髙的空间很大,本实例只是对原理进行讲解,如何提髙算法效率请读者自行研究。
  每处理一个网页后,可获得一个保存了网页信息的对象page,但page对象是在内存中的,因此还要将它保存到文件中,这里定义了一个PageLib类,它有一个静态方法,用来保存page对象到文件中。
  在Eclipse中生成一个PageLib类,package名为cn.edu.bjfu.search,page,如图8-76所示。

原始网页的处理的图片199

  图8-76PageLib类生成窗口
  这个包名同Page所在包,里面只有一个方法,如下所示。
  packagecn.edu.bjfu.search.page;

原始网页的处理的图片207

  importjava.io.BufferedWriter;
  inportjava.io.FileWriter;
  importjava.io.File;
  importjava.io.IOException;
  inportcn.edu.bjfu.search.util.*;
  publicclassPageLib{-
  publicstaticvoidstore(£?agepage){Stringstorepath=FroperConfig.getValue(”files.path“)+”/“+page.getSuimmary();if(netrFile.exists()==trua){System.out.println(”Message:n+storepath+“isexisted!”);cetum;
  }
  try{
  BufferedWriterwriter=newBufferedWriter(newFileWriter);//第一行为URL
  本文转载自
  宁波seoesball提款www.leseo.net
Seoesball.netesball提款相关拓展:
如何做好SEO搜索引擎esball提款?
seo高清视频在线观看
一篇读懂SEO、SEM区别与优劣势!
单页SEO站群技术用10个esball.netesball提款排名
为什么放弃了SEO这个标签,过时了吗?
seo是什么意思?
SEO是什么
SEO搜索esball提款软件
如何做好SEO的基本步骤
SEO工作职责及工作流程
搜索引擎esball提款(搜索esball提款)
关于esball世博
esball世博介绍
esball世博思维
人才招聘
使用条款
隐私保护
RSS订阅
esball.net地图
新闻动态
esball世博观点
行业动态
频道介绍
服务介绍
案例展示
品牌研究
品牌理论
品牌体系
联系我们
400-680-2900
社会媒体
微信公众平台
微信公众平台
<友情连结> 宁波斯博网络科技有限公司/ 宁波易企网络科技有限公司/ 宁波云网网络科技有限公司/ 围子里新闻/ 晋江市财经/