一、

  1. ConnectionManager manager = Page.getConnectionManager();
  2. Parser parser = new Parser(manager
  3. .openConnection("http://www.verycd.com/topics/2760827/"));
  4. parser.setEncoding("GBK");
  5. //提取a标签里的img图片链接
  6. //      NodeFilter filter = new AndFilter(new TagNameFilter("a"),
  7. //              new HasChildFilter(new TagNameFilter("img")));
  8. //      NodeFilter filter = new TagNameFilter("title");
  9. //提取input里面的东西
  10. NodeFilter filter = new AndFilter(new TagNameFilter("input"),
  11. new HasAttributeFilter("class","forminput"));
  12. //      NodeList nodeList = parser.parse(filter);
  13. NodeList nodeList = parser.extractAllNodesThatMatch(filter);
  14. NodeIterator it = nodeList.elements();
  15. while (it.hasMoreNodes()) {
  16. Node node = it.nextNode();
  17. System.out.println(node.toHtml());
  18. }
  19. }

二、

  1. // 获取一个网页上所有的链接和图片链接
  2.   public static void extracLinks(String url) {
  3.     try {
  4.       Parser parser = new Parser(url);
  5.       parser.setEncoding("gb2312");
  6. //过滤 <frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接
  7.       NodeFilter frameFilter = new NodeFilter() {
  8.         public boolean accept(Node node) {
  9.           if (node.getText().startsWith("frame src=")) {
  10.             return true;
  11.           } else {
  12.             return false;
  13.           }
  14.         }
  15.       };
  16. //OrFilter 来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系
  17.    OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new
  18. NodeClassFilter(ImageTag.class));
  19.    OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
  20.   //得到所有经过过滤的标签
  21.   NodeList list = parser.extractAllNodesThatMatch(linkFilter);
  22.   for (int i = 0; i < list.size(); i++) {
  23.     Node tag = list.elementAt(i);
  24.     if (tag instanceof LinkTag)//<a> 标签
  25.     {
  26.       LinkTag link = (LinkTag) tag;
  27.       String linkUrl = link.getLink();//url
  28.       String text = link.getLinkText();//链接文字
  29.       System.out.println(linkUrl + "**********" + text);
  30.     }
  31.     else if (tag instanceof ImageTag)//<img> 标签
  32.     {
  33.       ImageTag image = (ImageTag) list.elementAt(i);
  34.       System.out.print(image.getImageURL() + "********");//图片地址
  35.       System.out.println(image.getText());//图片文字
  36.     }
  37.     else//<frame> 标签
  38.     {
  39. //提取 frame 里 src 属性的链接如 <frame src="test.html"/>
  40.       String frame = tag.getText();
  41.       int start = frame.indexOf("src=");
  42.       frame = frame.substring(start);
  43.       int end = frame.indexOf(" ");
  44.       if (end == -1)
  45.         end = frame.indexOf(">");
  46.       frame = frame.substring(5, end - 1);
  47.       System.out.println(frame);
  48.     }
  49.   }
  50. } catch (ParserException e) {
  51.       e.printStackTrace();
  52. }
  53. }

三、

  1. public void test2() throws ParserException{
  2. ConnectionManager manager = Page.getConnectionManager();
  3. Parser parser = new Parser(manager.openConnection("http://www.verycd.com/sto/datum/computer/page1"));
  4. //提取A标签,他有一个父标签为H3
  5. NodeFilter filter = new AndFilter(new TagNameFilter("a"),new HasParentFilter(new TagNameFilter("h3")));
  6. NodeList nodes = parser.parse(filter);
  7. NodeIterator it = nodes.elements();
  8. while (it.hasMoreNodes()) {
  9. Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
  10. if (node instanceof LinkTag) {  //转换
  11. LinkTag linkNode = (LinkTag) node;
  12. System.out.println("http://www.verycd.com"+linkNode.getAttribute("href"));
  13. }
  14. }
  15. }

四、

  1. ConnectionManager manager = Page.getConnectionManager();
  2. Parser parser = new Parser(manager.openConnection("http://huodong.sodao.com/39/info#"));
  3. NodeFilter filter = new StringFilter("减价幅度");  //用了StringFilter,可以立即提取出所在的text节点
  4. NodeList nodes = parser.parse(filter);
  5. NodeIterator it = nodes.elements();
  6. while (it.hasMoreNodes()) {
  7. Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
  8. System.out.println(node.getParent().toHtml());  //通过indexof方法提取想要的text

五、

  1. /**
  2. * 用htmlparser提取图片的几种方法
  3. */
  4. public class Test {
  5. static Parser parser = new Parser();
  6. public static void test1(String url) throws ParserException{
  7. Parser parser = new Parser();
  8. parser.setURL(url);
  9. parser.setEncoding("GBK");
  10. //第一种方法
  11. NodeFilter imageFilter = new NodeFilter() {
  12. public boolean accept(Node node) {
  13. return (node instanceof ImageTag);
  14. }
  15. };
  16. NodeList images = parser.extractAllNodesThatMatch(imageFilter);
  17. //      第二种方法
  18. //      NodeFilter imageFilter = new TagNameFilter("img");
  19. //第三种方法
  20. //      NodeFilter imageFilter = new NodeClassFilter(ImageTag.class);
  21. //      NodeList images = parser.parse(imageFilter);
  22. System.out.println("Size: " + images.size());
  23. for(NodeIterator it = images.elements(); it.hasMoreNodes();){
  24. ImageTag node = (ImageTag) it.nextNode();
  25. System.out.println(node.getAttribute("src"));
  26. }
  27. }
  28. public static void test2(String url) throws ParserException {
  29. Parser parser = new Parser();
  30. parser.setURL(url);
  31. parser.setEncoding("GBK");
  32. NodeFilter divFilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id","text_content"));
  33. NodeList divs = parser.parse(divFilter);
  34. System.out.println(removeTag(divs.elementAt(0).toHtml()));
  35. }
  36. public static String removeTag(String content) {
  37. if (null != content && !"".equals(content.trim())) {
  38. while (content.indexOf("<") >=0 && content.indexOf(">") >= 0) {
  39. int i = content.indexOf("<");
  40. int j = content.indexOf(">");
  41. if (i < j) {
  42. String contetn1 = content.substring(0, i);
  43. String content2 = content.substring(j + 1,
  44. content.length() );
  45. content = contetn1 + content2;
  46. }
  47. }
  48. }
  49. return content;
  50. }
  51. public static void main(String[] args) throws ParserException {
  52. String url = "http://news.dayoo.com/china/200908/11/53868_10386441.htm";
  53. Test.test2(url);
  54. }
  55. }
  56. =====================================================================
  57. /** *//**
  58. * 分别读纯文本和链接.
  59. * @param result 网页的内容
  60. * @throws Exception
  61. */
  62. public static void readTextAndLinkAndTitle(String result) throws Exception {
  63. Parser parser;
  64. NodeList nodelist;
  65. parser = Parser.createParser(result, "utf8");
  66. NodeFilter textFilter = new NodeClassFilter(TextNode.class);
  67. NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
  68. NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
  69. OrFilter lastFilter = new OrFilter();
  70. lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });
  71. nodelist = parser.parse(lastFilter);
  72. Node[] nodes = nodelist.toNodeArray();
  73. String line = "";
  74. for (int i = 0; i < nodes.length; i++) {
  75. Node node = nodes[i];
  76. if (node instanceof TextNode) {
  77. TextNode textnode = (TextNode) node;
  78. line = textnode.getText();
  79. } else if (node instanceof LinkTag) {
  80. LinkTag link = (LinkTag) node;
  81. line = link.getLink();
  82. } else if (node instanceof TitleTag) {
  83. TitleTag titlenode = (TitleTag) node;
  84. line = titlenode.getTitle();
  85. }
  86. if (isTrimEmpty(line))
  87. continue;
  88. System.out.println(line);
  89. }
  90. }

六、

  1. /**
  2. * @author rrong_m
  3. * @throws ParserException
  4. */
  5. public static void getWords(String url) throws ParserException {
  6. Parser parser = new Parser(url);
  7. NodeFilter filter = new HasAttributeFilter("id", "word_more_con");
  8. NodeList nodelist = parser.extractAllNodesThatMatch(filter);
  9. NodeFilter filter1 = new NodeClassFilter(LinkTag.class);
  10. nodelist = nodelist.extractAllNodesThatMatch(filter1, true);
  11. for (int i = 0; i < nodelist.size(); i++) {
  12. LinkTag link = (LinkTag) nodelist.elementAt(i);
  13. System.out.println(link.getLinkText() + ":" + link.getLink());
  14. }
  15. }

七、处理html里面的table

  1. public List getChangyu(String id) throws HttpException, IOException, ParserException
  2. {
  3. HttpClient hc=new HttpClient();
  4. hc.getParams().setContentCharset("gb2312");
  5. PostMethod pm=new PostMethod("http://61.145.121.47/custSearch.jsp");
  6. pm.setParameter("bnos","111111111111");
  7. hc.executeMethod(pm);
  8. String temp=pm.getResponseBodyAsString(50000);//设置获取html代码的数量,否则会报错,过大
  9. //System.out.print(temp);
  10. Parser parser=new Parser(temp);
  11. NodeFilter filter=new HasAttributeFilter("cellpadding","-1");
  12. NodeList nodelist=parser.extractAllNodesThatMatch(filter);
  13. if(nodelist.size()>0)
  14. {
  15. NodeFilter filter1=new NodeClassFilter(TableTag.class);
  16. nodelist=nodelist.extractAllNodesThatMatch(filter1,true);
  17. if(nodelist.size()>0)
  18. {
  19. TableTag table=(TableTag) nodelist.elementAt(0);
  20. TableRow [] rows=table.getRows();
  21. if(rows.length>1)
  22. {
  23. for(int i=2;i<rows.length;i++)
  24. {
  25. TableRow row=rows[i];
  26. TableColumn td=row.getColumns()[0];
  27. TableColumn td1=row.getColumns()[1];
  28. System.out.println(td.toPlainTextString()+" "+td1.toPlainTextString());
  29. }
  30. }
  31. }
  32. }
  33. else
  34. {
  35. }
  36. return null;
  37. }

八、查询IP

  1. public static void getIp(String ip) throws ParserException
  2. {
  3. String url="http://www.ip138.com/ips.asp?ip="+ip;
  4. Parser parser=new Parser(url);
  5. parser.setEncoding("gb2312");//设置编码否则得到的是乱码51jsp.cn
  6. NodeList nodelist=null;
  7. NodeFilter filter=new HasAttributeFilter("class","ul1");//定义过滤51jsp.cn
  8. nodelist=parser.extractAllNodesThatMatch(filter);
  9. if(nodelist.size()>0)
  10. {
  11. System.out.println("您查询的IP为:"+ip);
  12. System.out.println(nodelist.elementAt(0).toPlainTextString());
  13. }
  14. }
  15. public static void main(String[] args) throws ParserException {
  16. getIp("125.33.192.180");
  17. }

九、提取html里面的p标签里面的内容

  1. public static ArrayList <String> getParagraphList( String content){
  2. ArrayList <String> paraList=new ArrayList <String>();
  3. Parser myParser=new Parser();
  4. NodeList nodeList = null;
  5. NodeFilter paraFilter = new NodeClassFilter(ParagraphTag.class);
  6. try {
  7. myParser.setInputHTML(content);
  8. nodeList = myParser.parse(paraFilter);
  9. for (int i = 0; i <= nodeList.size(); i++) {
  10. ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i);
  11. if(tag!=null){
  12. //   System.out.println(tag.getStringText());
  13. //  System.out.println("***********************************");
  14. paraList.add(tag.getStringText());
  15. }
  16. }
  17. } catch (ParserException e) {
  18. e.printStackTrace();
  19. }
  20. return paraList;
  21. }

htmlparser 精确提取的一些代码的更多相关文章

  1. webpack提取公共js代码

    webpack打包js代码与提取公共js代码分析 webpack提取公共js代码示例 一.分析 webpack默认打包js代码时,是将从入口js模块开始,将入口js模块所依赖的js以及模块逐层依赖的模 ...

  2. 在.NET中使用JQuery 选择器精确提取网页内容

    1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...

  3. 波特词干(Porter Streamming)提取算法无代码单纯理解

    最近写东西提到这个算法,要看一下,结果网上都是直接根据代码解释,对于我这种菜鸟在刚开始看一个算法的时候真心不想直接看代码学.奈何都是各种语言的代码,么得办法.先走了一遍,有了大致的了解,翻译成自己的话 ...

  4. 记webpack下提取公共js代码的方法

    环境: webpack4.6 + html-webpack-plugin 多页面多入口 经多次研究,稍微靠谱可用的配置 optimization: { splitChunks: { minSize: ...

  5. 提取DLL类库代码

    @SET destFolder=.\bin@XCOPY /I /Y %SYSTEMDRIVE%\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Pro ...

  6. webpack学习笔记--提取公共代码

    为什么需要提取公共代码 大型网站通常会由多个页面组成,每个页面都是一个独立的单页应用. 但由于所有页面都采用同样的技术栈,以及使用同一套样式代码,这导致这些页面之间有很多相同的代码. 如果每个页面的代 ...

  7. webpack4 系列教程(三): 多页面解决方案--提取公共代码

    这节课讲解webpack4打包多页面应用过程中的提取公共代码部分.相比于webpack3,4.0版本用optimization.splitChunks配置替换了3.0版本的CommonsChunkPl ...

  8. HttpClient和 HtmlParser实现爬虫

    网络爬虫技术 1       什么叫网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不 ...

  9. HttpClient 与 HtmlParser 简介 转载

    转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...

随机推荐

  1. WinForm应用程序退出的方法

    this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出. Application.Exit(); 强制所有消息中止,退出所有的 ...

  2. 实习笔记-2:sql 分组不一定要group by

    今天在公司写代码的时候,遇到一个sql语句构建问题. 情形是这样的: 我需要获取不同小组下前N条记录. select top 10 * from dbo.Topic where GroupID in ...

  3. windows phone 操作 http异步返回结果

    wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果.纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理 ...

  4. WebClient以POST方式发送Web请求

    本例使用WebClient以POST方式发送Web请求并下载一个文件,难点是postData的构造,发送Web请求时有的网站要求可能要求 Cookies前后一致.其中application/x-www ...

  5. IT书籍下载汇总--持续更新

    本书单由北北分享,并持续更新,请将该地址加入收藏夹:北北的书单 .badge{float:right;}.list-group-item > .badge + .badge{margin-rig ...

  6. ColorDialog组件设置字体颜色

    1.设置颜色 private void button4_Click(object sender, EventArgs e) { this.colorDialog1.ShowDialog(); this ...

  7. IOS 获得通讯录中联系人的所有属性 备用参考

    ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...

  8. nodejs 第一次使用

    在win7下安装与使用 1 nodejs官网下载,安装  https://nodejs.org/ 2 下载最新的 npm,在E:\nodejs\中解压  http://nodejs.org/dist/ ...

  9. Linux下使用dnf包管理器安装异常后导致的clear不可用

    该命令被包ncurses包含: 名称 : ncurses架构 : x86_64时期 : 0版本 : 5.9发布 : 16.20140323.fc21大小 : 433 k仓库 : @System概要 : ...

  10. js点击图片显示在左边大图

    <div class="imgbox cf">    <img src="temp/pic2.jpg" alt="" cl ...