高手帮助 htmlparser懂得进

liuqiyuan 2010-12-31
给这2个表格,如何过滤出指定的TD 表格内容项。我想根据td_num得到指定的td_value。因为标签属性都一样,所以有些困难。比如,我只想要第一个表格的td_value2和第二个表格的td_value6。如何根据td_num得到td_value呢???
请高手给出代码,最好用filter方法遍历节点访问内容。
代码好的,我会追加分!!!
<table border="0" cellpadding="2" cellspacing="0"><tr><td>FN</td><td>ISI Export Format</td></tr><tr><td>VR</td><td>1.0</td></tr><table xmlns:exsl="http://exslt.org/common">
<tr>
<td valign="top">td_1 </td>
<td>td_value1</td>
</tr>
<tr>
<td valign="top">td_2 </td>
<td>td_value2</td>
</tr>
<tr>
<td valign="top">td_3</td>
<td>td_value3</td>
</tr>
</table>
<table border="0" cellpadding="2" cellspacing="0"><tr><td>FN</td><td>ISI Export Format</td></tr><tr><td>VR</td><td>1.0</td></tr><table xmlns:exsl="http://exslt.org/common">
<tr>
<td valign="top">td_4 </td>
<td>td_value4</td>
</tr>
<tr>
<td valign="top">td_5</td>
<td>td_value5</td>
</tr>
<tr>
<td valign="top">td_6</td>
<td>td_value6</td>
</tr>
<tr>
<td valign="top">td_7</td>
<td>td_value7</td>
</tr>
</table>
gbfd2012 2011-01-04
String path="file:///D:/hh.html";
Parser parser=new Parser();
parser.setResource(path);
NodeFilter filter=new NodeClassFilter(TableTag.class);
NodeList list=parser.parse(filter);
TableTag table1=(TableTag) list.elementAt(1);
TableTag table2=(TableTag) list.elementAt(3);

TableRow tableRow=table1.getRow(1);
TableColumn[] tableColumn=tableRow.getColumns();
System.out.println("第一个值为: "+tableColumn[1].toPlainTextString());

TableRow tableRow2=table2.getRow(2);
TableColumn[] tableColumn2=tableRow2.getColumns();
System.out.println("第二个值为: "+tableColumn2[1].toPlainTextString());


其中的path为你的源码。。起始,感觉用htmlparser解析表格不是很爽,,你可以尝试下用xpath来定位表格,,这些的前提是你必须把网页源码的标签补齐,,,nekohtml可以补齐标签。。参考下吧。。
xjxiao 2011-01-07
htmlparser 这个东西以前工作的时候用过,用来抓取网页的数据的,现在好久没有用了,大家可以一起聊聊哦 QQ  1353739949
xjxiao 2011-01-07
public class Siluofake {
public static void main(String[] args) throws Exception {
// new HtmlFileAll().readTableContent();
Parser parser;
try {
parser = new Parser(
"http://eklubkeno.etip.sk/Archive.aspx?ddlDay=4&ddlMonth=marec&ddlYear=2010&ddlTimeSpan=09:00-09:59");
parser.setEncoding("UTF-8");
NodeFilter filter = new NodeClassFilter(TableTag.class);
NodeList list = parser.extractAllNodesThatMatch(filter);
String temp = "";
String result = "";
for (int i = 0; i < list.size(); i++) {
if (i % 2 != 0 && i != 1) { // 抓取数据所在表的下标值和
// 过滤多余的标签(因为改网上的数据没有任何隔离符号,这里用\N输出数据)
TableTag table = (TableTag) list.elementAt(i);
for (int j = 0; j < table.getRowCount(); j++) {

TableRow row = table.getRow(j);
TableColumn[] columns = row.getColumns();
for (int k = 0; k < columns.length; k++) {
// System.out.println(columns[k].toPlainTextString());
temp = columns[k].toPlainTextString();
result += temp + ",";
}
}
}
}  //System.out.println(result);
String str = "";
String[] arrays = result.split(",");
for (int i = 0; i < 20; i++) {
str += arrays[i] + ",";
}
str = str.substring(0, str.length() - 1);
System.out.println(str);
} catch (Exception e) {
// TODO: handle exception
}
}


love_ai87 2011-01-08
jsoup,类jquery的选择器,很方便
wf1006 2011-01-11
用javascript也可以找到对应的值啊!为什么不用?
ilrxx 2011-01-12
我之前做个整站的抓取,nekohtml个人感觉比htmlparser要方便一些,他可以通过xpath定位,你基本只需要用firefox的firebug插件得到要抓取的区域的xpath,然后用nekohtml的api去做就可以了,缺点是有些xpath需要自己调整。
sunxian99 2011-07-06
ilrxx 写道
我之前做个整站的抓取,nekohtml个人感觉比htmlparser要方便一些,他可以通过xpath定位,你基本只需要用firefox的firebug插件得到要抓取的区域的xpath,然后用nekohtml的api去做就可以了,缺点是有些xpath需要自己调整。

能详细点吗
illu 2011-07-06
jsoup  jsoup...
只用熟悉选择器 这个很好用的
Global site tag (gtag.js) - Google Analytics