前段时间,一直在弄html提取问题,可谓道路曲折(当然,现在看来是走了些弯路),现小结一下。
总得来说,一般有三种方法:
第一种方法:直接提取
即只提取除"<........>"之外的的东东,具体实现上,可以直接获取“>........<"之内的文字,也可以先踢出"<...........>"之内的文字。这里给出直接获取“>........<"之内的文字的程序片段。
//用readHtml(filePath);得到body标签中的内容
String str= readHtml(filePath);
StringBuffer buff = new StringBuffer();
int maxindex = str.length() - 1;
int begin = str.indexOf("<body>",0) + 5 ;
int end;
//截取>和<之间的内容
while((begin = str.indexOf('>',begin)) < maxindex - 1)
{
end = str.indexOf('<',begin);
if(end - begin > 1)
{
String strAll,strPart = "";
strAll = str.substring(++begin, end);
strPart += strAll;
buff.append(strPart);
}
注意了,这种方法思路简单,但效果不佳,原因显而易见,主要是html文件的特点及其相关语法决定的。如果你照此思路,结果可能让你多少有些失望,当然如果你要求不高,此法勉强可以接受。
第二种方法:用w3c有关知识
w3c具体知识网上随便百度一下就有一大堆,在此不再罗唆了;
其相关程序附下:
// 得到body标签内容
protected static String getBody(Element rawDoc) {
if (rawDoc == null) {
return "";
}
String body = "";
NodeList children = rawDoc.getElementsByTagName("body");
if (children.getLength() > 0) {
body = getText(children.item(0));
}
return body;
}
// 递归调用,因为标签里面还有标签
protected static String getText(Node node) {
NodeList children = node.getChildNodes();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
switch (child.getNodeType()) {
case Node.ELEMENT_NODE:
sb.append(getText(child));
sb.append(" ");
break;
case Node.TEXT_NODE:
sb.append(((Text) child).getData());
break;
}
}
return sb.toString();
}
说明一下,本方法需要有w3c.dom知识,只有熟练掌握,方可有“正果“可修,建议无畏者(如果你已有此知识积累不算此列)可以尝试,会有不小收获的哦。
第三种:运用正则表达式知识
正则表达式是个好东西哦,小巧灵活,像个小螺丝似的,关键时刻有时还真能发挥大作用,不多说废话,其思想是把我们所不需要的东西剔除掉,思路类似上一 ,但这里为突出正则表达式的作用,就单列了。其有关程序如下:
//得到body标签中的内容
String str= readHtml(filePath);
int begin = str.indexOf("<body",0) + 5 ;
int end = str.length();
str = str.substring(begin, end);
str = str.replaceAll("<[Ss][Cc][Rr][Ii][Pp][Tt].*?</[Ss][Cc][Rr][Ii][Pp][Tt]>", " ");
str = str.replaceAll("<[Ss][Tt][Yy][Ll][Ee].*?</[Ss][Tt][Yy][Ll][Ee]>", " ");
str = str.replaceAll(" ", " ");
str = str.replaceAll("<.*?>", " ");
str = str.replaceAll("\\s+"," ");
有关正则表达式的基础知识在此就不做介绍了。
ok,大体如此而已,这里仅提供大致的思路,当然由于知识有限,见识有限,如有其他好的方法,还希望各位高手指教。
分享到:
相关推荐
readabilityBUNDLE, 一组html内容提取算法 readabilityBUNDLE用Java编写的html主要内容提取。 它将把文章文本提取出来。最近,从html页面中提取主要文章内容是一个挑战性的开放。 有许多开源算法/实现可用。 本项目...
在这个项目中,"WindowsApplication1"可能是一个C#的Windows Forms应用程序,其中包含了WebBrowser控件的使用和HTML内容提取的代码实现。".sln"文件是Visual Studio的解决方案文件,包含了项目的所有配置信息。".suo...
在Python编程领域,Web爬虫...总的来说,Python的Web爬虫技术和HTML内容提取是数据挖掘、信息监控和知识管理等领域不可或缺的一部分。通过熟练掌握相关库和方法,我们可以高效地从互联网的海量信息中提取有价值的内容。
本篇文章将详细讲解如何利用Apache POI库进行Word内容提取及Word转HTML的过程,以及涉及的相关知识点。 Apache POI是一个开源项目,专为处理Microsoft Office格式的文件而设计,包括Word(.doc/.docx)、Excel(....
锅炉管-咖啡Boilerpipe html 内容提取器到 Coffeescript 的端口要求需要'htmlparser2' node.js 模块此外,该示例需要“fs”、“request”和“path”模块构建(合并为一个 javascript 文件)需要coffeescript-concat ...
Tika的核心功能是内容提取,这意味着它可以从不同类型的文件中抽取纯文本,这对于搜索引擎索引、数据分析、内容分析和文本挖掘等工作非常有用。以下是一些关于Tika的重要知识点: 1. **MIME类型识别**:Tika通过...
网页内容提取v2.0是一款基于vc6.0开发的工具,主要功能是针对htm/html格式的网页文件进行内容的高效提取。这个程序设计简洁,用户友好,只需要通过鼠标将待处理的网页文件拖放到程序窗口,然后按下回车键,即可开始...
给大家带来一款功能强大的批量文本提取器,该软件非常不错,当前支持支持正则表达式,批量提取文本,可以将HTML等文件中指定内容存入数据库、HTML、文本文件,存入数据库的意思是将提取的文本内容直接导入进数据库中...
在提供的压缩包文件中,"www.pudn.com.txt"可能是一个示例文件,其中包含了来自网站www.pudn.com的HTML内容,用于演示如何使用"html2txt"进行转换。"html2txt_lyang"可能是该工具的实现代码或执行文件,由用户"lyang...
HTML内容提取是一个重要的技术领域,尤其在Web抓取、数据挖掘和信息处理中扮演着核心角色。"html-content-extractor-old"项目显然是一款专门用于从HTML源代码中抽取信息和内容的工具,它可能适用于系统开发人员和...
在Python中,有多种库可以帮助我们完成正文内容提取,例如BeautifulSoup、lxml、PyQuery等,这些库主要用于HTML和XML文档的解析;而像NLTK(自然语言工具包)、spaCy和TextBlob则专注于NLP任务。 **BeautifulSoup库...
本话题将深入探讨如何利用Python处理HTML内容,特别是涉及内容提取和过滤器的使用。 Python是一种高级编程语言,以其简洁的语法和强大的库支持而闻名。在处理HTML内容时,Python提供了多个库,如BeautifulSoup和...
批量提取HTML/DOC/RTF/TXT等文件中的文本信息。 支持从其它网站直接提取文本内容,生成所需数据库文件 支持GB2312/UTF-8多种编码 可将提取信息生成文本文件、HTM网页文件、... 提取HTML文件中title与body的文本内容
在.NET平台上,开发人员经常需要处理HTML文档,例如从网页中提取主要内容,这在新闻聚合、搜索引擎优化(SEO)或数据分析等场景中尤为常见。本文将深入探讨如何使用高效的工具来实现这一目标,特别是针对“dotnet-...
HTMLParser 是一个用于解析HTML文档的Java库,它允许开发者以结构化的方式处理网页内容,例如提取特定元素、过滤不需要的标签等。在Web抓取或数据挖掘领域,HTMLParser是一个常用的工具,可以帮助我们从HTML源码中...
支持从压缩的html文档中提取正文内容。 支持带标签输出原始正文。 核心算法简洁高效,平均提取时间在30ms左右。 使用示例: /// /// 文章正文数据模型 /// public class Article { public string ...
基于文本对象模型的自动化网页内容提取方法是一种通过使用文档对象模型(DOM)技术,对原始网页的DOM结构进行优化和分析,进而实现自动化提取网页中有用内容的技术。该方法在信息检索、文本分析和网络资源数据处理...
批量提取HTML/DOC/RTF/TXT等文件中的文本信息。...提取HTML文件中title与body的文本内容 提取HTML文件中textarea的文本内容 提取HTML网页的显示文本内容 提取DOC/RTF等文件中全部文本内容 并可自定义正则表达式获取信息
java实现用正则表达式的方法提取html中的信息,可以提取标题,正文,链接等。经过运行,没问题的