日期:2014-05-17  浏览次数:20615 次

使用Cobra解析html, 及其提取table内容的例子。

?? ?以下方法读取一个html格式的String,然后把其中的table内容读出,存入一个Arralyst, 该list装入的是String[], 即每一个String[]元素代码table的一行。

?

	private List parseTable(String htmlStr) throws SAXException, IOException {
		Reader reader = new StringReader(htmlStr);
		InputSourceImpl inputSource = new InputSourceImpl(reader,
				"aaa");
		UserAgentContext uacontext = new SimpleUserAgentContext();
		DocumentBuilderImpl builder = new DocumentBuilderImpl(uacontext);
		Document d = builder.parse(inputSource);
		HTMLDocumentImpl document = (HTMLDocumentImpl) d;
		
		
		NodeList  nl=document.getElementsByTagName("table");
		ArrayList<String[]> records=new ArrayList<String[]>();
		for (int i = 0; i < nl.getLength(); i++) {
			HTMLTableElementImpl table=(HTMLTableElementImpl)nl.item(i);
			HTMLCollection rows=table.getRows();
			for (int j = 0; j < rows.getLength(); j++) {
				HTMLTableRowElementImpl row =(HTMLTableRowElementImpl)rows.item(j);
				HTMLCollection cells=row.getCells();
				ArrayList<String> cellsStr=new ArrayList<String>();
				for (int k = 0; k < cells.getLength(); k++) {
					HTMLTableCellElementImpl cell =(HTMLTableCellElementImpl)cells.item(k);
					cellsStr.add(cell.getTextContent().toString());
				}
				records.add(cellsStr.toArray(new String[0]));
			}
		}
                return records;
	}
?

?

?? ?由于要解析js,必须要用到Mozzila的rhino包。听说可以禁用js的解析,目前我还不知道如何做,没有仔细查API, 有知道的朋友说一声。

?? ?附一个,由于需要足够大的DropBox空间,如果你也正好需要一个DropBox,请使用我的邀请码注册。很实用的免费文件网盘DropBox 可以访问了