htmlparser实现爬虫成功的例子.docx

上传人:b****5 文档编号:12064028 上传时间:2023-04-16 格式:DOCX 页数:57 大小:93.78KB
下载 相关 举报
htmlparser实现爬虫成功的例子.docx_第1页
第1页 / 共57页
htmlparser实现爬虫成功的例子.docx_第2页
第2页 / 共57页
htmlparser实现爬虫成功的例子.docx_第3页
第3页 / 共57页
htmlparser实现爬虫成功的例子.docx_第4页
第4页 / 共57页
htmlparser实现爬虫成功的例子.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

htmlparser实现爬虫成功的例子.docx

《htmlparser实现爬虫成功的例子.docx》由会员分享,可在线阅读,更多相关《htmlparser实现爬虫成功的例子.docx(57页珍藏版)》请在冰豆网上搜索。

htmlparser实现爬虫成功的例子.docx

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="AAA"

+"

+"连接2";

//创建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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1