htmlparser实现爬虫成功的例子.docx
- 文档编号:12064028
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:57
- 大小:93.78KB
htmlparser实现爬虫成功的例子.docx
《htmlparser实现爬虫成功的例子.docx》由会员分享,可在线阅读,更多相关《htmlparser实现爬虫成功的例子.docx(57页珍藏版)》请在冰豆网上搜索。
htmlparser实现爬虫成功的例子
htmlparser实现爬虫成功例子
packageparser;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
import.MalformedURLException;
import.URL;
/**
*基本能实现网页抓取,不过要手动输入URL将整个html内容保存到指定文件
*
*@authorchenguoyong
*
*/
publicclassScrubSelectedWeb{
privatefinalstaticStringCRLF=System.getProperty("line.separator");
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
try{
URLur=newURL("http:
//10.249.187.199:
8083/injs100/");
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中文论坛.
ConstructorSummary
Parser()
Parser(URLConnection connection)
ConstructaparserusingtheprovidedURLConnection.
Method:
static ParsercreateParser(String html,String charset)
Createstheparseronaninputstring.
voidvisitAllNodesWith(NodeVisitor visitor)
Applythegivenvisitortothecurrentpage.
HtmlPage(Parser parser)
NodeList
getBody()
TableTag[]
getTables()
String
getTitle()
void
setTitle(String title)
void
visitTag(Tag tag)
CalledforeachTagvisited.
ConstructorSummary
NodeList()
NodeList(Node node)
Createaoneelementnodelist.
NodeListextractAllNodesThatMatch(NodeFilter filter)
Filterthelistwiththegivenfilternon-recursively.
NodeListextractAllNodesThatMatch(NodeFilter filter,boolean recursive)
Filterthelistwiththegivenfilter.
NodeelementAt(int i)
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="
+" +" //创建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;i LinkTaglink=(LinkTag)nodelist.elementAt(i); //链接地址 System.out.println(link.getAttribute("href")+"\n"); //链接名称 System.out.println(link.getStringText()); } } } 结果如下: 连接1 连接2 2.使用HtmlParser抓去网页内容 packageparser; importorg.htmlparser.Parser; importorg.htmlparser.beans.StringBean; importorg.htmlparser.filters.NodeClassFilter; importorg.htmlparser.parserapplications.StringExtractor; importorg.htmlparser.tags.BodyTag; importorg.htmlparser.util.NodeList; importorg.htmlparser.util.ParserException; /** *使用HtmlParser抓去网页内容: 要抓去页面的内容最方便的方法就是使用StringBean.里面有几个控制页面内容的几个参数. *在后面的代码中会有说明.Htmlparser包中还有一个示例StringExtractor里面有个直接得到内容的方法, *其中也是使用了StringBean.另外直接解析Parser的每个标签也可以的. * *@authorchenguoyong * */ publicclassGetContent{ publicvoidgetContentUsingStringBean(Stringurl){ StringBeansb=newStringBean(); sb.setLinks(true);//是否显示web页面的连接(Links) //为了取得页面的整洁美观一般设置上面两项为true,如果要保持页面的原有格式,如代码页面的空格缩进可以设置为false sb.setCollapse(true);//如果是true的话把一系列空白字符用一个字符替代. sb.setReplaceNonBreakingSpaces(true);//Iftrueregularspace sb .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=" //newGetContent().getContentUsingParser(url); //-------------------------------------------------- newGetContent().getContentUsingStringBean(url); } } 3.将整个html内容保存到指定文件 packageparser; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.FileWriter; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; import.MalformedURLException; import.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(); } } } 4利用htmlparser提取网页纯文本的例子 packageparser; importorg.htmlparser.Node; importorg.htmlparser.NodeFilter; importorg.htmlparser.Parser; importorg.htmlparser.filters.TagNameFilter; importorg.htmlparser.tags.TableTag; importorg.htmlparser.util.NodeList; /** *标题: 利用htmlparser提取网页纯文本的例子 */ publicclassTestHTMLParser2{ /** *读取目标html内容 * */ publicstaticvoidtestHtml(){ try{ StringsCurrentLine; StringsTotalString; sCurrentLine=""; sTotalString=""; java.io.InputStreaml_urlStream; .URLl_url=new.URL( "http: //10.249.187.199: 8083/injs100/"); .HttpURLConnectionl_connection=(.HttpURLConnection)l_url .openConnection(); l_connection.connect(); l_urlStream=l_connection.getInputStream(); java.io.BufferedReaderl_reader=newjava.io.BufferedReader( newjava.io.InputStreamReader(l_urlStream)); while((sCurrentLine=l_reader.readLine())! =null){ sTotalString+=sCurrentLine+"\r\n"; } StringtestText=extractText(sTotalString); }catch(Exceptione){ e.printStackTrace(); } } /** *抽取纯文本信息 *@paraminputHtml: html文本 *@return *@throwsException */ publicstaticStringextractText(StringinputHtml)throwsException{ StringBuffertext=newStringBuffer(); Parserparser=Parser.createParser(newString(inputHtml.getBytes(), "GBK"),"GBK"); //遍历所有的节点 NodeListnodes=parser.extractAllNodesThatMatch(newNodeFilter(){ publicbooleanaccept(Nodenode){ returntrue; } }); System.out.println(nodes.size()); for(inti=0;i Nodenodet=nodes.elementAt(i); //字符串的代表性节点: 节点的描述 text.append(newString(nodet.toPlainTextString().getBytes("GBK")) +"\r\n"); } returntext.toString(); } /** *读取文件的方式/utl来分析内容.filePath也可以是一个Url. *@paramresource: 文件/Url *@throwsException */ publicstaticvoidtest5(Stringresource)throwsException{ ParsermyParser=newParser(resource); myParser.setEncoding("GBK"); StringfilterStr="table"; NodeFilterfilter=newTagNameFilter(filterStr); NodeListnodeList=myParser.extractAllNodesThatMatch(filter); /*for(inti=0;i { TableTagtabletag=(TableTag)nodeList.elementAt(i); //标签名称 System.out.println(tabletag.getTagName()); System.out.println(tabletag.getTe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- htmlparser 实现 爬虫 成功 例子