- 浏览: 349356 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (176)
- Lucene (7)
- Solr (16)
- Hadoop/hbase (10)
- Nutch (2)
- 收藏链接 (7)
- javascript-xml-ajax (6)
- clasification (1)
- java base (22)
- TokenAnalyse (1)
- regEX (2)
- 持久化 (6)
- Linux (25)
- C/C++ (9)
- httpclient (5)
- TOMCAT (4)
- ECLIPSE (2)
- Parser_html (15)
- Database (2)
- struts2-spring-hibernate (7)
- finance (1)
- SEO (1)
- PHP (12)
- win2003 (5)
- security (3)
最新评论
-
menghuannvxia:
您好,我通过java上传文件到hadoop速度特别慢,怎么回事 ...
hadoop hdfs 一些用法 -
ydsakyclguozi:
ydsakyclguozi 写道david.org 写道错了. ...
hadoop修改默认的心跳检测的时间 -
ydsakyclguozi:
david.org 写道错了. heartbeat.reche ...
hadoop修改默认的心跳检测的时间 -
mypotatolove:
我现在想做用HttpClient从微博中爬取微博动态,能不能跟 ...
httpclient 设置user-agent -
青春的、脚步:
再者请教:如果查询的字段没有在配置文件的字段中加 termVe ...
solr morelikethis功能
一、
二、
三、
四、
五、
六、
七、处理html里面的table
八、查询IP
九、提取html里面的p标签里面的内容
ConnectionManager manager = Page.getConnectionManager(); Parser parser = new Parser(manager .openConnection("http://www.verycd.com/topics/2760827/")); parser.setEncoding("GBK"); //提取a标签里的img图片链接 // NodeFilter filter = new AndFilter(new TagNameFilter("a"), // new HasChildFilter(new TagNameFilter("img"))); // NodeFilter filter = new TagNameFilter("title"); //提取input里面的东西 NodeFilter filter = new AndFilter(new TagNameFilter("input"), new HasAttributeFilter("class","forminput")); // NodeList nodeList = parser.parse(filter); NodeList nodeList = parser.extractAllNodesThatMatch(filter); NodeIterator it = nodeList.elements(); while (it.hasMoreNodes()) { Node node = it.nextNode(); System.out.println(node.toHtml()); } }
二、
// 获取一个网页上所有的链接和图片链接 public static void extracLinks(String url) { try { Parser parser = new Parser(url); parser.setEncoding("gb2312"); //过滤 <frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接 NodeFilter frameFilter = new NodeFilter() { public boolean accept(Node node) { if (node.getText().startsWith("frame src=")) { return true; } else { return false; } } }; //OrFilter 来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系 OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new NodeClassFilter(ImageTag.class)); OrFilter linkFilter = new OrFilter(orFilter, frameFilter); //得到所有经过过滤的标签 NodeList list = parser.extractAllNodesThatMatch(linkFilter); for (int i = 0; i < list.size(); i++) { Node tag = list.elementAt(i); if (tag instanceof LinkTag)//<a> 标签 { LinkTag link = (LinkTag) tag; String linkUrl = link.getLink();//url String text = link.getLinkText();//链接文字 System.out.println(linkUrl + "**********" + text); } else if (tag instanceof ImageTag)//<img> 标签 { ImageTag image = (ImageTag) list.elementAt(i); System.out.print(image.getImageURL() + "********");//图片地址 System.out.println(image.getText());//图片文字 } else//<frame> 标签 { //提取 frame 里 src 属性的链接如 <frame src="test.html"/> String frame = tag.getText(); int start = frame.indexOf("src="); frame = frame.substring(start); int end = frame.indexOf(" "); if (end == -1) end = frame.indexOf(">"); frame = frame.substring(5, end - 1); System.out.println(frame); } } } catch (ParserException e) { e.printStackTrace(); } }
三、
public void test2() throws ParserException{ ConnectionManager manager = Page.getConnectionManager(); Parser parser = new Parser(manager.openConnection("http://www.verycd.com/sto/datum/computer/page1")); //提取A标签,他有一个父标签为H3 NodeFilter filter = new AndFilter(new TagNameFilter("a"),new HasParentFilter(new TagNameFilter("h3"))); NodeList nodes = parser.parse(filter); NodeIterator it = nodes.elements(); while (it.hasMoreNodes()) { Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据! if (node instanceof LinkTag) { //转换 LinkTag linkNode = (LinkTag) node; System.out.println("http://www.verycd.com"+linkNode.getAttribute("href")); } } }
四、
ConnectionManager manager = Page.getConnectionManager(); Parser parser = new Parser(manager.openConnection("http://huodong.sodao.com/39/info#")); NodeFilter filter = new StringFilter("减价幅度"); //用了StringFilter,可以立即提取出所在的text节点 NodeList nodes = parser.parse(filter); NodeIterator it = nodes.elements(); while (it.hasMoreNodes()) { Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据! System.out.println(node.getParent().toHtml()); //通过indexof方法提取想要的text
五、
/** * 用htmlparser提取图片的几种方法 */ public class Test { static Parser parser = new Parser(); public static void test1(String url) throws ParserException{ Parser parser = new Parser(); parser.setURL(url); parser.setEncoding("GBK"); //第一种方法 NodeFilter imageFilter = new NodeFilter() { public boolean accept(Node node) { return (node instanceof ImageTag); } }; NodeList images = parser.extractAllNodesThatMatch(imageFilter); // 第二种方法 // NodeFilter imageFilter = new TagNameFilter("img"); //第三种方法 // NodeFilter imageFilter = new NodeClassFilter(ImageTag.class); // NodeList images = parser.parse(imageFilter); System.out.println("Size: " + images.size()); for(NodeIterator it = images.elements(); it.hasMoreNodes();){ ImageTag node = (ImageTag) it.nextNode(); System.out.println(node.getAttribute("src")); } } public static void test2(String url) throws ParserException { Parser parser = new Parser(); parser.setURL(url); parser.setEncoding("GBK"); NodeFilter divFilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id","text_content")); NodeList divs = parser.parse(divFilter); System.out.println(removeTag(divs.elementAt(0).toHtml())); } public static String removeTag(String content) { if (null != content && !"".equals(content.trim())) { while (content.indexOf("<") >=0 && content.indexOf(">") >= 0) { int i = content.indexOf("<"); int j = content.indexOf(">"); if (i < j) { String contetn1 = content.substring(0, i); String content2 = content.substring(j + 1, content.length() ); content = contetn1 + content2; } } } return content; } public static void main(String[] args) throws ParserException { String url = "http://news.dayoo.com/china/200908/11/53868_10386441.htm"; Test.test2(url); } } ===================================================================== /** *//** * 分别读纯文本和链接. * @param result 网页的内容 * @throws Exception */ public static void readTextAndLinkAndTitle(String result) throws Exception { Parser parser; NodeList nodelist; parser = Parser.createParser(result, "utf8"); NodeFilter textFilter = new NodeClassFilter(TextNode.class); NodeFilter linkFilter = new NodeClassFilter(LinkTag.class); NodeFilter titleFilter = new NodeClassFilter(TitleTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter }); nodelist = parser.parse(lastFilter); Node[] nodes = nodelist.toNodeArray(); String line = ""; for (int i = 0; i < nodes.length; i++) { Node node = nodes[i]; if (node instanceof TextNode) { TextNode textnode = (TextNode) node; line = textnode.getText(); } else if (node instanceof LinkTag) { LinkTag link = (LinkTag) node; line = link.getLink(); } else if (node instanceof TitleTag) { TitleTag titlenode = (TitleTag) node; line = titlenode.getTitle(); } if (isTrimEmpty(line)) continue; System.out.println(line); } }
六、
/** * @author rrong_m * @throws ParserException */ public static void getWords(String url) throws ParserException { Parser parser = new Parser(url); NodeFilter filter = new HasAttributeFilter("id", "word_more_con"); NodeList nodelist = parser.extractAllNodesThatMatch(filter); NodeFilter filter1 = new NodeClassFilter(LinkTag.class); nodelist = nodelist.extractAllNodesThatMatch(filter1, true); for (int i = 0; i < nodelist.size(); i++) { LinkTag link = (LinkTag) nodelist.elementAt(i); System.out.println(link.getLinkText() + ":" + link.getLink()); } }
七、处理html里面的table
public List getChangyu(String id) throws HttpException, IOException, ParserException { HttpClient hc=new HttpClient(); hc.getParams().setContentCharset("gb2312"); PostMethod pm=new PostMethod("http://61.145.121.47/custSearch.jsp"); pm.setParameter("bnos","111111111111"); hc.executeMethod(pm); String temp=pm.getResponseBodyAsString(50000);//设置获取html代码的数量,否则会报错,过大 //System.out.print(temp); Parser parser=new Parser(temp); NodeFilter filter=new HasAttributeFilter("cellpadding","-1"); NodeList nodelist=parser.extractAllNodesThatMatch(filter); if(nodelist.size()>0) { NodeFilter filter1=new NodeClassFilter(TableTag.class); nodelist=nodelist.extractAllNodesThatMatch(filter1,true); if(nodelist.size()>0) { TableTag table=(TableTag) nodelist.elementAt(0); TableRow [] rows=table.getRows(); if(rows.length>1) { for(int i=2;i<rows.length;i++) { TableRow row=rows[i]; TableColumn td=row.getColumns()[0]; TableColumn td1=row.getColumns()[1]; System.out.println(td.toPlainTextString()+" "+td1.toPlainTextString()); } } } } else { } return null; }
八、查询IP
public static void getIp(String ip) throws ParserException { String url="http://www.ip138.com/ips.asp?ip="+ip; Parser parser=new Parser(url); parser.setEncoding("gb2312");//设置编码否则得到的是乱码51jsp.cn NodeList nodelist=null; NodeFilter filter=new HasAttributeFilter("class","ul1");//定义过滤51jsp.cn nodelist=parser.extractAllNodesThatMatch(filter); if(nodelist.size()>0) { System.out.println("您查询的IP为:"+ip); System.out.println(nodelist.elementAt(0).toPlainTextString()); } } public static void main(String[] args) throws ParserException { getIp("125.33.192.180"); } }
九、提取html里面的p标签里面的内容
public static ArrayList <String> getParagraphList( String content){ ArrayList <String> paraList=new ArrayList <String>(); Parser myParser=new Parser(); NodeList nodeList = null; NodeFilter paraFilter = new NodeClassFilter(ParagraphTag.class); try { myParser.setInputHTML(content); nodeList = myParser.parse(paraFilter); for (int i = 0; i <= nodeList.size(); i++) { ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i); if(tag!=null){ // System.out.println(tag.getStringText()); // System.out.println("***********************************"); paraList.add(tag.getStringText()); } } } catch (ParserException e) { e.printStackTrace(); } return paraList; }
发表评论
-
HtmlCleanner结合xpath用法
2009-12-09 20:36 1398HtmlCleaner cleaner = ... -
java 正则表达式
2009-11-24 16:01 894\\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ( ... -
htmlparser获取网页上所有有用链接的方法
2009-10-30 14:01 2162public static void getAllLin ... -
htmlparser解析自定义标签功能
2009-10-19 09:13 1364import org.htmlparser.tags.Co ... -
nekohtml使用笔记
2009-09-22 11:32 35461、透明地创建HTML解析器 利用Xerces2.0为基础 ... -
htmlparser使用例子(全)
2009-09-22 11:24 11038import java.net.URL; impor ... -
nekohtml经典小例子一个
2009-09-22 10:45 1595public class Demo { public s ... -
nekohtml的2个小例子
2009-09-22 10:10 1665//获取网页里面的keywords和description ... -
htmlparser提取正文
2009-09-21 16:34 2676htmlparser提取正文,提取新浪等门户首页是不太干净 ... -
通过百度获取天气预报
2009-09-21 16:13 3039通过百度获取天气预报 http://htmlparser.co ... -
一个很好的htmlparser的学习blog
2009-09-21 16:03 1758http://htmlparser.com.cn/,里面的文章 ... -
httpclient htmlparser来查询手机号相关信息
2009-09-21 15:58 1108httpclient htmlparser来查询手机号相关信 ... -
nekohtml 用法
2009-09-21 15:02 2168//nekohtml结合xpath用法 DOMParse ... -
获取meta里的keywords及description的方法
2009-02-26 10:11 1815通过jericho包获取meta里的keywords及desc ...
相关推荐
基于HTMLParser 信息提取的网络爬虫设计论文
c#版htmlparser htmlparser.dll htmlparser源代码
HTMLParser.net源代码HTMLParser.net使用demo
HTMLParser提取网页超链接研究 HTMLParser提取网页超链接研究
HtmlParser提取网页信息的设计与实现
HTMLParser提取网页内容,提取网页正文及标题等内容
使用HtmlParser 提取百度贴吧中的图片
基于htmlparser的网页爬虫和java调用excel代码,本人爬取新浪新闻所写的爬虫代码,附带本人练习时所写的代码,非常全。而且可以将爬取的新闻内容直接导入到excel中。
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
HTMLParser 2.0最新jar API 源代码 整合包
相关jar及htmlparser的源代码。本人还没验证过是否能用。但应该没什么问题。 filterbuilder.jar htmllexer.jar htmlparser.jar junit.jar sax2.jar thumbelina.jar
提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。 毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。 无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍...
HtmlParser2003 自动抓取网页信息
htmlparser 代码 方便查看,了解代码
Winista.Htmlparser.net 源代码 本资料共包含以下附件: HtmlParser c#源码+demo.rar
htmlparser.jar htmlparser教程
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载