HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:
1.jsoup
Jsoup是一个集强大和便利于一体的HTML解析工具。它方便的地方是,可以用于支持用jQuery中css selector的方式选取元素,这对于熟悉js的开发者来说基本没有学习成本。
String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");
Jsoup还支持白名单过滤机制,对于网站防止XSS攻击也是很好的。
2.HtmlParser
HtmlParser的功能比较完备,也挺灵活,但谈不上方便。这个项目很久没有维护了,最新版本是2.1。HtmlParser的核心元素是Node,对应一个HTML标签,支持getChildren()等树状遍历方式。HtmlParser另外一个核心元素是NodeFilter,通过实现NodeFilter接口,可以对页面元素进行筛选。这里有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 实现简易爬虫。
3.Apache tika
tika是专为抽取而生的工具,还支持PDF、Zip甚至是JavaClass。使用tika分析HTML,需要自己定义一个抽取内容的Handler并继承org.xml.sax.helpers.DefaultHandler,解析方式就是xml标准的方式。crawler4j中就使用了tika作为解析工具。SAX这种流式的解析方式对于分析大文件很有用,我个人倒是认为对于解析html意义不是很大。
4.HtmlCleaner与XPath
HtmlCleaner最大的优点是:支持XPath的方式选取元素。XPath是一门在XML中查找信息的语言,也可以用于抽取HTML元素。XPath与CSS Selector大部分功能都是重合的,但是CSS Selector专门针对HTML,写法更简洁,而XPath则是通用的标准,可以精确到属性值。XPath有一定的学习成本,但是对经常需要编写爬虫的人来说,这点投入绝对是值得的。
⑵ jsoup 可以为一个页面放入CSS样式吗
你说的是jsonp吧。
jsonp只是一种从服务端获取数据的方式。
你的问题可以拆分回成如下步骤来解决:答
通过jsonp获取css样式的文本内容;
通过js在html中创建<style>标签,把获取的内容添加进去。
如此样式就生效了。
⑶ java jsoup 解析html获取没有包含的内容
java jsoup 解析html获取没有包含的内容
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class Test {
public static void main(String[] args) {
String str = "<table><tr><td>user</td><td>cc</td></tr><tr><td>pass</td><td>123</td></tr></table>";
Document doc = Jsoup.parse(str);
Elements trs = doc.select("table").select("tr");
for(int i = 0;i<trs.size();i++){
Elements tds = trs.get(i).select("td");
for(int j = 0;j<tds.size();j++){
String text = tds.get(j).text();
System.out.println(text);
}
}
}
}
⑷ jsoup中element类有操作css的方法吗
$(".box").css({
"border":"1pxsolid#ccc",
"width":"100px"
});
⑸ 使用Jsoup怎样解析本地的html文件
Jsoup解析是按照字符串解析的,比如:
Documentdoc=Jsoup.parse(response1Str);
这句传入的response1Str就是一个String类型。因此你只需把本地html文件作为文本全读入为一个字符串,然后再用JSoup进一步解析就行了。
有关读入文件,变成字符串,我刚刚答过一个问题,你可参考一下:
http://..com/question/456256407982905445
剩下的代码,就是JSoup用类似CSS选择器的语法,取出你需要的元素,作进一步处理了。
例如:
Elementse2=doc.getElementsByTag("input");
for(Elemente:e2){
if(e.attr("name").equals("formhash")){
formhashStr=e.attr("value");
break;
}
}
System.out.println("formhash="+formhash);上面这个代码片段是取出具有name属性为formhash的<input>标签,并打印此属性的value值。
建议去JSoup官网了解更详细的API及功能。
⑹ 用jsoup解析HTML时报错;java.lang.noclassdeffounderror:org/jsoup/Jsoup
哥们 看在你和我遇到一样的问题 我就帮你一下 反正我是解决了
java.lang.NoClassDefFoundError: org.jsoup.Jsoup错误分析
2012-11-21
在使用Jsoup包时版,权通过在classpath中加载Jsoup1.6.1.jar包形式进行引入,ADT版本:20.0.0.v201206242043-391819,运行时意外退出,出现
1
java.lang.NoClassDefFoundError: org.jsoup.Jsoup错误,错误指向Jsoup包应用的语句,
1
doc = Jsoup.parse(new URL(urlString), 5000);在反复核对之后,又试用了Jsoup1.6.3.jar包,依然不行,经网上查证,原来是ADT在升级到版本20之后无法加载这个jar包。
解决方案是:引用将现有的引用Build path删除掉Jsoup.jar包,然后在工程根目录下建立libs文件夹,注意一定是libs文件夹,而非lib,使用android tools 修复一下工程,然后clean一下工程,refresh重新编译一下,ok问题解决。
⑺ jsoup 能不能解析function里面的东西
jsoup的主要功能如下:
1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
如果是页面的function都可以解析。但写在服务器端(js文件里)的function就不可以。
⑻ jsoup怎么解析javascript动态改变html标签的属性值
jsoup可以解析出 js 的文件名,至于 js 文件里的内容,可以用程序下载能得到的,专但这不是属 jsoup 干的事。
参考实例如下:
Elements els = doc.select("script");
for(Element el: els) {
//提取src信息
String src = el.attr("src");
//得到js的地址了,就可以下载了。比如外部css样式表也可以类似的方式取出来
}
⑼ 用过jsoup的来看看,如何抽取style中的css属性
一般来说不建议直接在对象中直接写style,建议写到class中,再以替换class来实现改变样式
⑽ Java 处理 html Css
有,自定义jstl ,这个非常方便,建议楼主去学习下,例子如下:
当时我要在很多页面根据值判断状态给不一样的样式。如果用if-else太麻烦了,每个页面都要写,于是就用到了自定义jstl。
导入自定义标签后在页面调用:
<%@tagliburi="/tags/cos-cstatus"prefix="cs"%>
<td>
<cs:cstatusvalue="${item.the_consolidated_status}"/>
</td>
代码:
@Override
publicintdoEndTag()throwsJspException{
try{
if(value==null||value.length()==0){
pageContext.getOut().print("");
}elseif("Normal".equalsIgnoreCase(value)){
pageContext.getOut().print("<spanclass='label'>"+value+"</span>");
}elseif("Warning".equalsIgnoreCase(value)){
pageContext.getOut().print("<spanclass='labellabel-warning'>"+value+"</span>");
}else{
pageContext.getOut().print("<spanclass='labellabel-important'>"+value+"</span>");
}
}catch(Exceptione){
e.printStackTrace();
}
returnEVAL_PAGE;
}
效果:
