htmlparser解析网页内容代码
/*抽取html网页文本,循环到值节点并判断是否有src链接*/public void htmlText(String url) throws Exception{try {URL u = new URL(url);if("https".equalsIgnoreCase(u.getProtocol())){SslUtils.ignoreSsl();}//生成一个解析器对象,用网页的 url 作为参数Parser parser = new Parser(url);if(parser.getEncoding().equals("ISO-8859-1")) parser.setEncoding("UTF-8");//迭代所有节点, null 表示不使用 NodeFilterNodeList list = parser.parse(null);//循环值节点并输出processNodeList(list); //输出大节点/*SimpleNodeIterator iterator = list.elements();while (iterator.hasMoreNodes()) {Node node = iterator.nextNode();String result = node.toHtml();System.out.println(result); }*/}catch (ParserException e) {e.printStackTrace();}}private void processNodeList(NodeList list) {//迭代开始SimpleNodeIterator iterator = list.elements();while (iterator.hasMoreNodes()) {Node node = iterator.nextNode(); //得到该节点的子节点列表NodeList childList = node.getChildren();//孩子节点为空,说明是值节点if (null == childList){//得到值节点的值String txt = node.toHtml();System.out.println(txt);if(txt.contains("src=")){int start = txt.indexOf("src=");txt=txt.substring(start);int end = txt.indexOf(" ");if (end == -1) end = txt.indexOf(">");String src = txt.substring(5, end - 1);System.out.println(src);} }else processNodeList(childList);//孩子节点不为空,继续迭代该孩子节点}}
/** 在htmlparser中,Node分成三类,都继承AbstractNode:* RemarkNode:代表Html中的注释* TagNode:标签节点。* TextNode:文本节点*/public void tagGet(String url){try {Parser parser = new Parser(url);if(parser.getEncoding().equals("ISO-8859-1")) parser.setEncoding("UTF-8");NodeVisitor visitor = new NodeVisitor( true, true ) {public void visitTag(Tag tag) {System.out.println("This is Tag:"+tag.getText());}public void visitStringNode (Text string) {System.out.println("This is Text:"+string);}public void visitRemarkNode (Remark remark) {System.out.println("This is Remark:"+remark.getText());}public void beginParsing () {System.out.println("beginParsing");}public void visitEndTag (Tag tag){System.out.println("visitEndTag:"+tag.getText());}public void finishedParsing () {System.out.println("finishedParsing");}};parser.visitAllNodesWith(visitor);/*NodeVisitor visitor = new NodeVisitor() { public void visitTag(Tag tag) { System.out.println("正在访问的tag:" + tag.getTagName() + " || Class is :"+ tag.getClass()); } }; parser.visitAllNodesWith(visitor);*///NodeList parse = parser.parse(null);//System.out.println(parse.toHtml());} catch (ParserException e) {e.printStackTrace();}}
/** 单独获取inputtag和formtag*/public void formGet(String url) throws ParserException{Parser parser = new Parser(url);if(parser.getEncoding().equals("ISO-8859-1")) parser.setEncoding("UTF-8");NodeFilter inputFilter = new NodeClassFilter(InputTag.class);NodeFilter formFilter = new NodeClassFilter(FormTag.class);NodeFilter frameFilter = new NodeClassFilter(FrameTag.class);OrFilter lastFilter = new OrFilter();lastFilter.setPredicates(new NodeFilter[] { formFilter, inputFilter,frameFilter });NodeList nodeList = parser.parse(lastFilter);for(int i = 0; i <= nodeList.size(); i++){if(nodeList.elementAt(i) instanceof InputTag){InputTag tag = (InputTag) nodeList.elementAt(i);System.out.println("Input Info:" + tag.getTagName()+":"+tag.getText());}if(nodeList.elementAt(i) instanceof FormTag){FormTag tag = (FormTag) nodeList.elementAt(i);System.out.println("Form Info: " + tag.getFormName()+":"+tag.getText());NodeList inputnodes=tag.getFormInputs();for(int j=0;j<=inputnodes.size();j++){InputTag tag1 = (InputTag) inputnodes.elementAt(j);System.out.println("Input Info:" + tag1.getTagName()+":"+tag1.getText());} }if(nodeList.elementAt(i) instanceof FrameTag){FrameTag tag = (FrameTag) nodeList.elementAt(i);System.out.println("Frame Info: " + tag.getFrameName()+":"+tag.getText());}}}/** org.htmlparser Class PrototypicalNodeFactory* A node factory based on the prototype pattern. * This factory uses the prototype pattern to generate new nodes. * These are cloned as needed to form new Text, Remark and Tag nodes.*/public void hyperGet(String url) throws ParserException{PrototypicalNodeFactory factory = new PrototypicalNodeFactory ();factory.registerTag(new FormTag());Parser parser = new Parser (url);parser.setNodeFactory (factory);NodeFilter filter = new NodeClassFilter(FormTag.class);NodeList nodeList = parser.parse(filter);for (Node node : nodeList.toNodeArray()) { if (node instanceof FormTag) { FormTag tag = (FormTag) node;System.out.println("Form Info: " + tag.getFormName()+":"+tag.getText());}}}
htmlparser解析网页内容代码相关推荐
- htmlparser解析网站时服务器返回的文件编码和页面编码不一致问题
1.用htmlparser解析http://gz.fang.com/抛出如下异常: Exception in thread "main" org.htmlparser.util.E ...
- 基于htmlparser实现网页内容解析
网页解析,即程序自动分析网页内容.获取信息,从而进一步处理信息. 网页解析是实现网络爬虫中不可缺少而且十分重要的一环,由于本人经验也很有限,我仅就我们团队开发基于关键词匹配和模板匹配的主题爬虫的经验谈 ...
- 转载自android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)
转载自http://blog.csdn.net/sac761/article/details/48379173 android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式) 标签: ...
- 用HTMLParser解析html时报错:No module named 'htmlentitydefs'
python3.6用HTMLParser解析html时报错 No module named 'htmlentitydefs'或No module named 'markupbase' 先上代码 fro ...
- 使用 markdown-it 解析 markdown 代码(读 VuePress 三)
前言 在此系列文章的第一篇,我们介绍了 Vuepress 如何让 Markdown 支持 Vue 组件的,但没有提到非 Vue 组件的其他部分如何被解析. 今天,我们就来看看 Vuepress 是如何 ...
- 【深度学习】梯度和方向导数概念解析(代码基于Pytorch实现)
[深度学习]梯度和方向导数概念解析(代码基于Pytorch实现) 文章目录 1 方向导数 2 梯度 3 自动求导实现 4 梯度下降4.1 概述4.2 小批量梯度下降 5 总结 1 方向导数 方向导数的 ...
- 分析和解析PHP代码的7大工具
PHP已成为时下最热门的编程语言之一,然而却有许多PHP程序员苦恼找不到合适的工具来帮助自己分析和解析PHP代码.今天小编就为大家介绍几个非常不错的工具,来帮助程序员们提高自己的工作效率,一起来看看吧 ...
- 编程笔试(解析及代码实现):国内各大银行(招商银行/浦发银行等)在线笔试常见题目(猴子吃桃/字符串逆序输出/一段话输出字的个数/单词大小转换等)及其代码实现(Java/Python/C#等)之详细攻略
编程笔试(解析及代码实现):国内各大银行(招商银行/浦发银行等)在线笔试常见题目(猴子吃桃/字符串逆序输出/一段话输出字的个数/单词大小转换等)及其代码实现(Java/Python/C#等)之详细攻略 ...
- 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略
编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 目录 字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 ...
最新文章
- hbase 问题整理
- python 图表_使用Streamlit-Python将动画图表添加到仪表板
- app启动页自动跳转源码_关于移动端App启动页的策划方案
- 对于网络爬虫的提问?
- iPhone 居然能当公交卡刷了?!
- 五种 JSP页面跳转方法详解
- java创建一个单链表,接受输入的数据,并输出
- JavaScript 怎样写注释
- JanusGraph基础知识
- 浅析VO、DTO、DO、PO的概念、区别和用处
- 天猫精灵GXIC2020 AIOT物联网大赛获奖了
- 华为云视频点播服务全面开放公测!限量发放VIP免费名额中...
- 5.pygame图片显示
- flink catalog 及dialect、数据转存分析
- uni-app 结合云函数开发小程序博客(二):云函数实现登录注册
- 微信里关闭窗口 js
- c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...
- 基于华为云设计的智能家居控制系统(STM32+ESP8266)
- 四六级重要单词(二)
- 行业分析-磁共振造影剂市场现状及未来发展趋势
热门文章
- java上传网络图片_java网络编程之图片上传
- 在公网上的Linux,我的一些配置分享
- [BZOJ3261] 最大异或和 (异或前缀和,可持久化Trie)
- 【node】------mongoose的基本使用------【巷子】
- 使用beanUtils操纵javabean
- 传iPhone 4S下月初开卖
- 新病毒仿熊猫烧香 利用 Vista系统漏洞疯狂传播
- android编译error, forbidden warning出错问题解决
- Android BOOTCLASSPATH详解
- filebeat 收集json格式_集群日志收集架构ELK