htmlparser实现从网页上抓取数据

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

packageparser;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URL;/***基本能实现网页抓取,不过要手动输入URL将整个html内容保存到指定文件**@authorchenguoyong**/publicclassScrubSelectedWeb{privatefinalstaticStringCRLF=System.getProperty(line.separator);/***@paramargs*/publicstaticvoidmain(String[]args){try{URLur=newURL();InputStreaminstr=ur.openStream();Strings,str;BufferedReaderin=newBufferedReader(newInputStreamReader(instr));StringBuffersb=newStringBuffer();BufferedWriterout=newBufferedWriter(newFileWriter(D:/outPut.txt));while((s=in.readLine())!=null){sb.append(s+CRLF);}System.out.println(sb);str=newString(sb);out.write(str);out.close();in.close();}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}基本能实现网页抓取,不过要手动输入URL,此外没有重构。只是一个简单的思路。1.htmlparser使用htmlparser是一个纯的java写的html解析的库,htmlparser不依赖于其它的java库,htmlparser主要用于改造或提取html。htmlparser能超高速解析html,而且不会出错。毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。由于htmlparser结构设计精良,所以扩展htmlparser非常便利。Htmlparser中文论坛.=6ConstructorSummaryParser()Parser(URLConnectionconnection)ConstructaparserusingtheprovidedURLConnection.Method:staticParsercreateParser(Stringhtml,Stringcharset)Createstheparseronaninputstring.voidvisitAllNodesWith(NodeVisitorvisitor)Applythegivenvisitortothecurrentpage.HtmlPage(Parserparser)NodeListgetBody()TableTag[]getTables()StringgetTitle()voidsetTitle(Stringtitle)voidvisitTag(Tagtag)CalledforeachTagvisited.ConstructorSummaryNodeList()NodeList(Nodenode)Createaoneelementnodelist.NodeListextractAllNodesThatMatch(NodeFilterfilter)Filterthelistwiththegivenfilternon-recursively.NodeListextractAllNodesThatMatch(NodeFilterfilter,booleanrecursive)Filterthelistwiththegivenfilter.NodeelementAt(inti)1.html代码里面所有的链接地址和链接名称packageparser;importorg.htmlparser.Parser;importorg.htmlparser.Node;importorg.htmlparser.NodeFilter;importorg.htmlparser.Parser;importorg.htmlparser.filters.TagNameFilter;importorg.htmlparser.tags.LinkTag;importorg.htmlparser.tags.TableTag;importorg.htmlparser.util.NodeList;importorg.htmlparser.util.ParserException;importorg.htmlparser.visitors.HtmlPage;/***htmlparser取得一段html代码里面所有的链接地址和链接名称**@authorchenguoyong**/publicclassTesthtmlparser{/***@paramargs*/publicstaticvoidmain(String[]args){Stringhtmlcode=HTMLHEADTITLEAAA/TITLE/HEADBODY+ahref='连接1/a+ahref='连接2/a/BODY/HTML;//创建Parser对象根据传给字符串和指定的编码Parserparser=Parser.createParser(htmlcode,GBK);//创建HtmlPage对象HtmlPage(Parserparser)HtmlPagepage=newHtmlPage(parser);try{//HtmlPageextendsvisitor,Applythegivenvisitortothecurrent//page.parser.visitAllNodesWith(page);}catch(ParserExceptione1){e1=null;}//所有的节点NodeListnodelist=page.getBody();//建立一个节点filter用于过滤节点NodeFilterfilter=newTagNameFilter(A);//得到所有过滤后,想要的节点nodelist=nodelist.extractAllNodesThatMatch(filter,true);for(inti=0;inodelist.size();i++){LinkTaglink=(LinkTag)nodelist.elementAt(i);//链接地址System.out.println(link.getAttribute(href)+\n);//链接名称System.out.println(link.getStringText());}}}结果如下:连接1***使用HtmlParser抓去网页内容:要抓去页面的内容最方便的方法就是使用StringBean.里面有几个控制页面内容的几个参数.*在后面的代码中会有说明.Htmlparser包中还有一个示例StringExtractor里面有个直接得到内容的方法,*其中也是使用了StringBean.另外直接解析Parser的每个标签也可以的.**@authorchenguoyong**/publicclassGetContent{publicvoidgetContentUsingStringBean(Stringurl){StringBeansb=newStringBean();sb.setLinks(true);//是否显示web页面的连接(Links)//为了取得页面的整洁美观一般设置上面两项为true,如果要保持页面的原有格式,如代码页面的空格缩进可以设置为falsesb.setCollapse(true);//如果是true的话把一系列空白字符用一个字符替代.sb.setReplaceNonBreakingSpaces(true);//Iftrueregularspacesb.setURL();System.out.println(TheContentis:\n+sb.getStrings());}publicvoidgetContentUsingStringExtractor(Stringurl,booleanlink){//StringExtractor内部机制和上面的一样.做了一下包装StringExtractorse=newStringExtractor(url);Stringtext=null;try{text=se.extractStrings(link);System.out.println(Thecontentis:\n+text);}catch(ParserExceptione){e.printStackTrace();}}publicvoidgetContentUsingParser(Stringurl){NodeListnl;try{Parserp=newParser(url);nl=p.parse(newNodeClassFilter(BodyTag.class));BodyTagbt=(BodyTag)nl.elementAt(0);System.out.println(bt.toPlainTextString());//保留原来的内容格式.包含js代码}catch(ParserExceptione){e.printStackTrace();}}/***@paramargs*/publicstaticvoidmain(String[]args){Stringurl=

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功