- 浏览: 216267 次
- 性别:
- 来自: 北京
最新评论
-
lzj0470:
这种方式,带来的问题很大。如:返回一个对象,然后再调用一些办法 ...
自定义classloader加密java程序 -
bushkarl:
JavaScript 胸罩尺寸计算器 -
bushkarl:
...
Ubuntu php 环境配置 -
dearsunkey:
hao !
Ubuntu php 环境配置 -
qskm:
这个怎么用呢?楼主没说清楚啊,
1、 加密的话该怎么加密?直接 ...
自定义classloader加密java程序
spider中需要提取纯文本:
1.javax.swing.text
这种方法比较麻烦,自己写很多的callback,效率很低,效果不见得好
2.htmlparser
方便,但是不规则的htm效果太差,总是遗留大量的tag
package testlucene; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.nodes.TextNode; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.visitors.HtmlPage; /** * 演示了Html Parse的应用. * * @author scud http://www.jscud.com */ public class HtmlParser { public static void main(String[] args) throws Exception { String aFile = "d:/1.html"; String content = readTextFile(aFile, "GBK"); // System.out.println(test1(content)); // test2(content); // System.out.println("===================================="); System.out.println(getText(content)); // System.out.println("===================================="); // test4(content); // System.out.println("===================================="); // test5(aFile); // SSystem.out.println("===================================="); } /** * 读取文件的方式来分析内容. filePath也可以是一个Url. * * @param resource * 文件/Url */ public static void test5(String resource) throws Exception { Parser myParser = new Parser(resource); // 设置编码 myParser.setEncoding("GBK"); HtmlPage visitor = new HtmlPage(myParser); myParser.visitAllNodesWith(visitor); String textInPage = visitor.getTitle(); System.out.println(textInPage); } /** * 得到普通文本和链接的内容. * * 使用了过滤条件. */ public static String getText(String content) throws ParserException { Parser myParser; NodeList nodeList = null; StringBuilder result = new StringBuilder(); myParser = Parser.createParser(content, "GBK"); NodeFilter textFilter = new NodeClassFilter(TextNode.class); NodeFilter linkFilter = new NodeClassFilter(LinkTag.class); // 暂时不处理 meta // NodeFilter metaFilter = new NodeClassFilter(MetaTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter }); nodeList = myParser.parse(lastFilter); Node[] nodes = nodeList.toNodeArray(); String line = ""; for (int i = 0; i < nodes.length; i++) { Node anode = (Node) nodes[i]; if (anode instanceof TextNode) { TextNode textnode = (TextNode) anode; // line = textnode.toPlainTextString().trim(); line = textnode.getText(); } else if (anode instanceof LinkTag) { LinkTag linknode = (LinkTag) anode; line = linknode.getLink(); // @todo 过滤jsp标签:可以自己实现这个函数 // line = StringFunc.replace(line, "<%.*%>", ""); } if (isTrimEmpty(line)) continue; // System.out.println(line); result.append(line); } return result.toString(); } /** * 读取一个文件到字符串里. * * @param sFileName * 文件名 * @param sEncode * String * @return 文件内容 */ public static String readTextFile(String sFileName, String sEncode) { StringBuffer sbStr = new StringBuffer(); try { File ff = new File(sFileName); InputStreamReader read = new InputStreamReader(new FileInputStream( ff), sEncode); BufferedReader ins = new BufferedReader(read); String dataLine = ""; while (null != (dataLine = ins.readLine())) { sbStr.append(dataLine); sbStr.append("\r\n"); } ins.close(); } catch (Exception e) { e.printStackTrace(); } return sbStr.toString(); } /** * 去掉左右空格后字符串是否为空 * * @param astr * String * @return boolean */ public static boolean isTrimEmpty(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } if (isBlank(astr.trim())) { return true; } return false; } /** * 字符串是否为空:null或者长度为0. * * @param astr * 源字符串. * @return boolean */ public static boolean isBlank(String astr) { if ((null == astr) || (astr.length() == 0)) { return true; } else { return false; } } }
3.regex
很简单,很实用,会丢失信息,对js不太支持,不过可以与处理一下
text = Scontent.replaceAll("<[^>]*>","");
4.自己处理,可以用些设计模式,留待有空时做。
发表评论
-
JavaScript 胸罩尺寸计算器
2008-11-30 10:45 2280只在周末放松一下 ;) Ed Spencer 已经用Java ... -
JDB 的简单使用
2008-11-24 10:08 1180当新手开始学习Java 时 ... -
自定义classloader加密java程序
2008-11-21 16:32 13843大概想法是这样的: 1. 生成密钥用于在des算法中加密。 2 ... -
dr.scheme中不能输入字符问题的解决
2008-11-02 20:23 1544LANG=C drscheme -
mit-scheme出现HEAP_IN_LOW_MEMORY错误的解决办法
2008-11-01 22:29 1236sudo sysctl -w vm.mmap_min_addr ... -
linux下的GTKLookAndFeel.initSystemColorDefaults异常
2008-10-26 16:25 1150不能使用SystemLookAndFeel,不知跟发行版有没有 ... -
我的emacs配置文件~
2008-10-26 00:29 3307贴在这,免得以后丢了还得写~ (setq default ... -
Linux操作系统中如何使用ISO文件
2008-08-17 22:02 19171.什么是ISO文件? ISO文件:就是以iso为扩展名的文 ... -
深入了解laptop_mode
2008-08-16 11:28 5490对UBUNTU6.06LTS中切入Laptop_mode模式的 ... -
VIM 快捷键(转)
2008-08-10 14:56 2219VIM快捷键: ctags 文件名 ... -
hardy的vim语法高亮
2008-08-10 14:54 1501hardy自带的vim不是完全版的,所以在设置syntax o ... -
ubuntu handy编译google gadgets
2008-08-10 11:40 1183simple step by step instruction ... -
在linux下转换psp的mp4
2008-08-09 23:00 1334开始使用mencoder,比较麻烦,参数总调整不好,http: ... -
Alpine Messaging System, the alternative to Pine.
2008-08-02 16:12 1012I just tried Alpine the email p ... -
lftp中文问题
2008-07-19 09:33 1339<!-- @page { si ... -
The greatest equations ever
2008-07-17 15:48 1056Maxwell's equations of electrom ... -
只许你大步的向前走
2008-05-07 01:14 1186借用许飞的一句歌词,这几天把《恰许同学年少》这张听了n遍,真该 ... -
java socket-message-作业慢慢写~今天就到这
2008-05-04 21:10 1530package org.tiantian.message.se ... -
Html解析生成纯文本-使用SAX以及htmlcleaner
2008-04-22 01:00 1964package testlucene; import jav ... -
JSP使用多线程
2008-04-20 23:23 1581spider之中需要使用多线程去抓取网页,本来还有点疑惑,没想 ...
相关推荐
取消标记从Markdown中提取纯旧文本#Installation bower install unmark #用法简单如下: < html >< head > < script type =" text/javascript " src =" bower_components/unmark/unmark.js " > &...
一个简单的库和命令行实用程序,用以从HTML页面或者明文中抽取摘要。该包也包含用于文本摘要的简单评价框架。
8.5 添加p和br标签将纯文本转换为HTML 8.6 在XML风格的标签中查找某个特定属性 8.7 向不包含cellspacing属性的 table标签中添加该属性 8.8 删除XML风格的注释 8.9 在XML风格的注释中查找单词 8.10 替换在CSV文件中...
8.5 添加p和br标签将纯文本转换为HTML 8.6 在XML风格的标签中查找某个特定属性 8.7 向不包含cellspacing属性的 table标签中添加该属性 8.8 删除XML风格的注释 8.9 在XML风格的注释中查找单词 8.10 替换在CSV...
如果你希望使用用户姓名进行简单的抽取,就可以使用它,操作简单使用方便,里面纯源码,也可以根据你的喜好进行修改。(如果你想去掉浏览器边框让其看其看起来更高逼格,可以按F11,进入全屏模式),如果想修改抽奖...
利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型 基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个...
num()抽取节点自有文本中全部数字,如果知道节点的自有文本(即非子代节点所包含的文本)中只存在一个数字,如阅读数,评论数,价格等那么直接可以直接提取此数字出来。如果有多个数字将提取第一个匹配的连续数字。...
利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实世界模型 基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...
BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义的范围的内容。 WebSocket协议的Java实现 WebSocket4J WebSocket4...