比来快递收多了,发觉没个主动跟踪的app还真是累,虽说国内快递的跟踪信息更新比力慢,可是有得看总比没有好。海内的公司貌似不会供给api的,以是只能本身抓取内容。抓取内容就触及到对HTML代码的剖析题目,Google了一下,发明这类包仍是良多的。我挑选了HTMLParser(http://htmlparser.sourceforge.net/),上面简略引见下用HTMLParser抓取table标签内容的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package org.odichy.parsertest; ? import java.net.URL; ? import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.tags.TableColumn; import org.htmlparser.tags.TableRow; import org.htmlparser.tags.TableTag; import org.htmlparser.util.NodeList; ? public class Main { public static void main(String[] args) throws Exception { //组织最根基的Parser工具,用的是URLConnection为参数的机关函数 Parser parser = new Parser((new URL("http://www.谷歌.com/prc/report.html")).openConnection()); //NodeFilter便是过滤器,默示你想要甚么标签,若是想要多个标签的话还可以用OrFilter来整合 //TableTag.class暗示过滤table标签 NodeFilter tableFilter = new NodeClassFilter(TableTag.class); //标签成果列表,用法和ArrayList差未几 NodeList list = parser.parse(tableFilter); for(int i=0;i<list.size();i++) { //实际上这个判定能够不停止 if(list.elementAt(i) instanceof TableTag) { TableTag tag = (TableTag)list.elementAt(i); //得到<table />里面的<tr />标签 TableRow[] rows = tag.getRows(); for(TableRow row: rows) { //取得<tr />内里的<td />标签 TableColumn[] tds = row.getColumns(); for(TableColumn td: tds) { //这里假如<td />内里不咱们想要的内容,就疏忽了 //toPlainTextString()输出的字符串主动过滤了其余标签 if("".equals(td.toPlainTextString().trim())) { continue; } System.out.println(td.toPlainTextString().trim()); } } } } } } |
博文推荐: