文章目录:
大侠们我想问两个Android开发使用jsoup解析html的相关问题
问题:大侠们我想问两个Android开发使用jsoup解析html的相关问题
回答:第一个问题帮你解决了;第二个问题很简单(但你用错了),但没有你的这个htm文件,没有修改测试
super.onCreate(savedInstanceState);
TextView txt = new TextView(this);
InputStream input;
try {
input = getResources().getAssets().open("temp04_assets/txt01.htm");
int buffersize = input.available();// 取得输入流的字节长度
byte buffer[] = new byte[buffersize];
input.read(buffer);// 将数据读入数组
input.close();// 读取完毕后要关闭流。
String txthtml = EncodingUtils.getString(buffer, "UTF-8");// 设置取得的数据编码,防止乱码
Document doc = Jsoup.parse(txthtml);
Element infoTable = doc.getElementsByAttributeValue("class",
"table002").first();
Elements tableLineInfos = infoTable.select("tr");
for (Element lineInfo : tableLineInfos) {
String lineInfoContent = lineInfo.select("td").last().text()
.trim();
txt.setText(lineInfoContent);
setContentView(txt);
}
} catch (IOException err) {
err.getStackTrace();
}
java中几种解析html的工具
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甚至是Java Class。使用tika分析HTML,需要自己定义一个抽取内容的Handler并继承org.xml.sax.helpers.DefaultHandler,解析方式就是xml标准的方式。crawler4j中就使用了tika作为解析工具。SAX这种流式的解析方式对于分析大文件很有用,我个人倒是认为对于解析html意义不是很大。
InputStream inputStream = null;
HtmlParser htmlParser = new HtmlParser();
htmlParser.parse(new ByteArrayInputStream(page.getContentData()),
contentHandler, metadata, new ParseContext());
4.HtmlCleaner与XPath
HtmlCleaner最大的优点是:支持XPath的方式选取元素。XPath是一门在XML中查找信息的语言,也可以用于抽取HTML元素。XPath与CSS Selector大部分功能都是重合的,但是CSS Selector专门针对HTML,写法更简洁,而XPath则是通用的标准,可以精确到属性值。XPath有一定的学习成本,但是对经常需要编写爬虫的人来说,这点投入绝对是值得的。
java jsoup 爬虫 怎么防止重复爬取
正好最近在学习这方面的内容。
两种思路:
可以将当前爬取的url存在一个list中作登记,在下一次开始爬子链接的时候进行比对,如果已经存在在list中则跳过,如果不存在那么继续爬
可以将所有的url网络先遍历一遍存在list中,然后根据list而不是再次访问子链接url进行爬取,在url存入list的过程中进行查重处理
顺便为了方便控制。建议设置爬取深度,在一定深度内进行爬取。
jsoup和poi两个什么区别
POI一般用于多个系统的合路与分路,用于大型建筑或者有统一建设方承建的项目。
技术指标也比较高,要防止多系统之间的干扰,保证不能把发射机阻塞了。
普通的合路器一般指的是单个器件,接口有限不具备多个系统合路的条件。
我是这么理解的,希望对你有帮助。
第二个问题很简单(但你用错了),但没有你的这个htm文件,没有修改测试super.onCreate(savedInstanceState);TextView txt = new TextV
经存在在list中则跳过,如果不存在那么继续爬可以将所有的url网络先遍历一遍存在list中,然后根据list而不是再次访问子链接url进行爬取,在url存入list的过程中进行查重处理顺便为了方便控制。建议设置爬取深度,在一定深度内进行爬取。jsoup和poi两个什么区别POI一般用于多