对于不同服务器名的站点,可以把全文内容都抓取下来。然后根据高亮显示的提示,从内容中截取一定的长度。其实,本来最主要的问题就是对抓取的网页进行分类,尤其是标题的选择。其他均次之。
记录了一下自己写的代码(校内):
- package com.extractor.hangdian;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import org.htmlparser.Node;
- import org.htmlparser.NodeFilter;
- import org.htmlparser.Parser;
- import org.htmlparser.filters.TagNameFilter;
- import org.htmlparser.util.NodeList;
- import org.htmlparser.util.ParserException;
- import org.htmlparser.visitors.TextExtractingVisitor;
- import com.extractor.Extractor;
- public class ExtractHan extends Extractor{
- public void extract()
- {
- BufferedWriter bw=null;
- String body;
- NodeFilter bodyFilter=new TagNameFilter("body");
- try {
- NodeList bodyList=this.getParser().parse(bodyFilter);
- Node bodyNode=bodyList.elementAt(0);
- /*
- * bodyNode.toHtml()中的toHtml()必不可少。
- */
- Parser parser=new Parser(bodyNode.toHtml());
- TextExtractingVisitor visitor=new TextExtractingVisitor();
- parser.visitAllNodesWith(visitor);
- body=visitor.getExtractedText();
- String newtext="";
- if(body.length()>21376)
- body=body.substring(0,10000);
- for(int i=0;i<body.length();i++)
- {
- char ch=body.charAt(i);
- if(ch=='<')
- {
- i++;
- while(body.charAt(i)!='>')
- i++;
- }
- if(ch!='<'&&ch!=' '&&ch!='/r'&&ch!= '/n')
- newtext+=ch;
- }
- /*
- * 要做校内搜索,url还是个难题啊
- */
- int end1=getInputFilePath().lastIndexOf("i");
- int end2=getInputFilePath().lastIndexOf(".");
- String url_seg1=getInputFilePath().substring(3,end1);
- String url_seg2=getInputFilePath().substring(end1, end2);
- String url_seg=url_seg1+".asp?"+url_seg2;
- url_seg=url_seg.replaceAll("////","/");
- String url="http://"+url_seg;
- try {
- bw=new BufferedWriter(new FileWriter(new File(this.getOutputPath()+Extractor.count+".txt")));
- bw.write(url+NEWLINE);
- bw.write(newtext+NEWLINE);
- } catch (IOException e) {
- e.printStackTrace();
- }
- } catch (ParserException e) {
- e.printStackTrace();
- }
- if(bw!=null)
- try {
- bw.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[]args) throws Exception
- {
- Extractor extractor=new ExtractHan();
- extractor.setOutputPath("需要存储的文件地址");
- File file=new File("源文件的存放位置");
- traverse(extractor,file);
- }
- }
由于对网页的url处理的还不够完善,因此还没有做到最好,而且我最近也不想搞了,所以就先放着吧。
网页路径问题哦!