一、

  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. 初识IO流之小型资源管理器

    初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知 ...

  2. JS 版的pnp in_array($str,$arr)

    var a = Array(1,2,3,4,5); function in_array(search,array){ for(var i in array){ if(array[i]==search) ...

  3. 如何编写规范,灵活,稳定,高质量的HTML和css代码

    黄金定律 永远遵循同一套编码规范,不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. 语法: 1.用两个空格来代替制表符(tab);2.嵌套元素应当缩进一次(两个空格); 3.对 ...

  4. mac下搭建react-native环境

    1.安装Homebrew 2.安装node(最好安装4.x以上版本这样就自带了一个npm) 3.安装npm(node的包管理工具) 一般高版本的npm在安装node的时候已经具有了 4.安装react ...

  5. VC6.0生成的exe文件图标

    以下是我网上收到的方法 我都试过 成功不了 具体说下我遇到的问题 VC6.0生成的exe文件图标是用Icon下几个图标中value值最小的,顺序为IDR_MAINFRAME.IDR_ICONTETYP ...

  6. python引入导入自定义模块和外部文件

    参考:http://blog.csdn.net/devil_2009/article/details/15816237 项目中想使用以前的代码,或者什么样的需求致使你需要导入外部的包 如果是web 下 ...

  7. WPF学习笔记2——XAML之2

    三.事件处理程序与代码隐藏 例如,为一个Page添加一个Button控件,并为该Button添加事件名称Button_Click: <Page xmlns="http://schema ...

  8. poj 3013 Big Christmas Tree Djistra

    Big Christmas Tree 题意:图中每个节点和边都有权值,图中找出一颗树,树根为1使得 Σ(树中的节点到树根的距离)*(以该节点为子树的所有节点的权值之和) 结果最小: 分析:直接求出每个 ...

  9. input标签文字点击变颜色

    <input type="text" class="ser_input"value="从这里搜索(^_^)" onfocus=&quo ...

  10. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理

    Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...