想要从网页的html源代码中提取想要的信息,例如从下面的代码中(在2楼)抽取出如下的信息:
  
车次                              出发站                    发车时间            抵达站                 抵达时间 
 
T100A(广州东至上海)       广州东(Guangzhou East)        18:10        上海(Shanghai)          次日11:10
T100B(九龙至上海)         广州东(Guangzhou East)        18:10        上海(Shanghai)         次日11:10
K512(三亚至上海南)        广州(Guangzhou)               9:00        上海南(Shanghai South)   次日5:43
K528(广州至南京西)        广州(Guangzhou)               8:00         上海(Shanghai)          次日4:26 

解决方案 »

  1.   

    <html>
    <head>
    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb_2312-80">
    <title>火车时刻查询</title>
    <meta name="Keywords" content="列车时刻,火车时刻">
    <style>
    <!--.nu {text-decoration: none; color: #0000FF }
        A:link {text-decoration: none; color: #0000FF }
        A:visited {text-decoration: none; color: #0000FF}
        A:hover {text-decoration: none; color: #FF0000}   -->
    </style>
    </head><body topmargin="0"><table border="0" width="95%" bgcolor="#5162F9" cellspacing="0" align="center">
      <tr> 
        <td width="50%"><a href="http://www.china-traveller.com"><img src="/images/ct.gif" width="400" height="61" border="0"></a></td>
        <td width="50%"> 
          <table width="100%" border="0" cellspacing="0" cellpadding="5" align="center">
            <tr> 
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/huabei.asp"><b><font size="2" color="#FFFFFF">华北线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/huadong.asp"><b><font size="2" color="#FFFFFF">华东线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/dongbei.asp"><b><font size="2" color="#FFFFFF">东北线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/xibei.asp"><b><font size="2" color="#FFFFFF">西北线路</font></b></a></div>
              </td>
            </tr>
            <tr> 
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/huazhong.asp"><b><font size="2" color="#FFFFFF">华中线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/huanan.asp"><b><font size="2" color="#FFFFFF">华南线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/xinan.asp"><b><font size="2" color="#FFFFFF">西南线路</font></b></a></div>
              </td>
              <td> 
                <div align="center"><a href="http://www.china-traveller.com/area/chujing.asp"><b><font size="2" color="#FFFFFF">出境线路</font></b></a></div>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table><br><div align="center">
    <p align="center"><font size="2" color="#008080"><b class="tm">广州至上海(仅供参考,如有变动,请注意车站公告)</b></font></p>
    <div align="center"> 
      <table border="1" width="90%" bordercolor="#FFFFFF" cellspacing="1"
    bordercolorlight="#000000">
        <tr> 
          <td bgcolor="#008080" width="212"> 
            <p align="center"><font size="2" color="#FFFFFF"><b>车次</b></font> 
          </td>
          <td bgcolor="#008080" width="202"><font size="2"> 
            <p align="center"><b><font
        color="#FFFFFF">出发站</font></b> 
            </font></td>
          <td bgcolor="#008080" width="90"><font size="2"> 
            <p align="center"><b><font
        color="#FFFFFF">发车时间</font></b> 
            </font></td>
          <td bgcolor="#008080" width="183"><font size="2"> 
            <p align="center"><b><font
        color="#FFFFFF">抵达站</font></b> 
            </font></td>
          <td bgcolor="#008080" width="103"><font size="2"> 
            <p align="center"><b><font
        color="#FFFFFF">抵达时间</font></b> 
            </font></td>
        </tr>
        
        <tr  bgcolor="#F2F9F9" onMouseOut="this.style.background='#F2F9F9'"  onMouseOver="this.style.background='#CAE4FF'"> 
          <td width="212"> 
            <p align="center"><a href="train_detail.asp?checi=T100A" target="_blank"><font size="2" color="#FF0000">T100A(广州东至上海)</font> 
              </a><br>
          </td>
          <td width="202"> 
            <p align="center"><font size="2">广州东(Guangzhou East)<br>
              </font> 
          </td>
          <td width="90"> 
            <p align="center"><font size="2">18:10<br>
              </font> 
          </td>
          <td width="183"> 
            <p align="center"><font size="2">上海(Shanghai)<br>
              </font> 
          </td>
          <td width="103"> 
            <p align="center"><font size="2">次日11:10<br>
              </font> 
          </td>
        </tr>
        
        <tr  bgcolor="#F2F9F9" onMouseOut="this.style.background='#F2F9F9'"  onMouseOver="this.style.background='#CAE4FF'"> 
          <td width="212"> 
            <p align="center"><a href="train_detail.asp?checi=T100B" target="_blank"><font size="2" >T100B(九龙至上海)</font> 
              </a><br>
          </td>
          <td width="202"> 
            <p align="center"><font size="2">广州东(Guangzhou East)<br>
              </font> 
          </td>
          <td width="90"> 
            <p align="center"><font size="2">18:10<br>
              </font> 
          </td>
          <td width="183"> 
            <p align="center"><font size="2">上海(Shanghai)<br>
              </font> 
          </td>
          <td width="103"> 
            <p align="center"><font size="2">次日11:10<br>
              </font> 
          </td>
        </tr>
        
        <tr  bgcolor="#F2F9F9" onMouseOut="this.style.background='#F2F9F9'"  onMouseOver="this.style.background='#CAE4FF'"> 
          <td width="212"> 
            <p align="center"><a href="train_detail.asp?checi=K512" target="_blank"><font size="2" >K512(三亚至上海南)</font> 
              </a><br>
          </td>
          <td width="202"> 
            <p align="center"><font size="2">广州(Guangzhou)<br>
              </font> 
          </td>
          <td width="90"> 
            <p align="center"><font size="2">9:00<br>
              </font> 
          </td>
          <td width="183"> 
            <p align="center"><font size="2">上海南(Shanghai South)<br>
              </font> 
          </td>
          <td width="103"> 
            <p align="center"><font size="2">次日5:43<br>
              </font> 
          </td>
        </tr>
        
        <tr  bgcolor="#F2F9F9" onMouseOut="this.style.background='#F2F9F9'"  onMouseOver="this.style.background='#CAE4FF'"> 
          <td width="212"> 
            <p align="center"><a href="train_detail.asp?checi=K528" target="_blank"><font size="2" >K528(广州至南京西)</font> 
              </a><br>
          </td>
          <td width="202"> 
            <p align="center"><font size="2">广州(Guangzhou)<br>
              </font> 
          </td>
          <td width="90"> 
            <p align="center"><font size="2">8:00<br>
              </font> 
          </td>
          <td width="183"> 
            <p align="center"><font size="2">上海(Shanghai)<br>
              </font> 
          </td>
          <td width="103"> 
            <p align="center"><font size="2">次日4:26<br>
              </font> 
          </td>
        </tr>
        
      </table>
    </div><form method="GET" action="train.asp" target="_blank">
      <input type="hidden" name="from" value="上海"><input type="hidden" name="to"
      value="广州"><div align="center"><p><input TYPE="submit"
      VALUE="返程车次查询"></p>
      </div>
    </form>
    <div align="center">
    <script type="text/javascript"><!--
    google_ad_client = "pub-3494826308550115";
    //728x90, 创建于 07-11-6
    google_ad_slot = "6968038796";
    google_ad_width = 728;
    google_ad_height = 90;
    //--></script>
    <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    </div>
    </body>
    </html>
      

  2.   

    是这样吗?提前所有html元素! public static String splitAndFilterString(String input, int length) {
    if (input == null || input.trim().equals("")) {
    return "";
    }
    // 去掉所有html元素,
    String str = input.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll(
    "<[^>]*>", "");
    str = str.replaceAll("[(/>)<]", "");
    int len = str.length();
    if (len <= length) {
    return str;
    } else {
    str = str.substring(0, length);
    str += "......";
    }
    return str;
    }
      

  3.   

    我建议不用表格,用CSS样式表,把上面的再改一下
      

  4.   

    用httpclient发送请求,得到返回html;用htmlparser解析
      

  5.   

    根据 <tr  bgcolor="#F2F9F9" onMouseOut="this.style.background='#F2F9F9'"  onMouseOver="this.style.background='#CAE4FF'"> ,从中提取标志利用正则表达式过滤做循环一次提取就可以了
      

  6.   

    URL 可以获得html源码,然后再过滤一下.获取你想要的内容
      

  7.   

    <tr.+?>[.\s\S]*?<font.*?>(.*?)</font>[.\s\S]*?<font.*?>(.*?)<br>\s*</font>[.\s\S]*?<font.*?>(.*?)<br>\s*</font>[.\s\S]*?<font.*?>(.*?)<br>\s*</font>正则表达式就可以了。
      

  8.   


    现在是已经得到了html,举个例子,是得到了从2个不同网站返回的html,其中1个的部分源码是
    <table onclick=sortColumn(event) border=0 bgcolor=#0033cc cellspacing=1 cellpadding=0 width=770 align=center><THEAD><tr bgcolor=#ffffff><td align=center height=18><a href=# title=按车次排序>车次</a></td><td align=center height=18><a href=#>类型</a></td><td align=center height=18><a href=#>始发站</a></td><td align=center height=18><a href=#>出发站</a></td><td align=center height=18><a href=#>开车时间</a></td><td align=center height=18><a href=#>目的站</a></td><td align=center height=18><a href=#>到达时间</a></td><td align=center height=18><a href=#>用时</a></td><td align=center height=18><a href=#>里程</a></td><td align=center height=18><a href=#>终点站</a></td><td align=center height=18><a href=#>硬座</a></td><td align=center height=18><a href=#>软座</a></td><td align=center height=18><a href=#>硬卧中</a></td><td align=center height=18><a href=#>软卧下</a></td></tr></THEAD><tr bgcolor=#ffffff onmouseover=this.bgColor='#eeeeee'; onmouseout=this.bgColor='#ffffff';><td align=center height=18><a href=http://www.huoche.com.cn/c106912/>K528</a></td><td align=center height=18>空调快速</td><td align=center height=18><a href=http://www.huoche.com.cn/z891/>广州</a></td><td align=center height=18><a href=http://www.huoche.com.cn/z891/>广州</a></td><td align=center height=18>08:08</td><td align=center height=18><a href=http://www.huoche.com.cn/z2132830382/>上海南</a></td><td align=center height=18>次日04:10</td><td align=center height=18>20小时2分</td><td align=center height=18>1780</td><td align=center height=18><a href=http://www.huoche.com.cn/z1909/>南京西</a></td><td align=center height=18>203</td><td align=center height=18>-</td><td align=center 另一个得到页面部分的html:
      <td width="60" align="center"><a href="javascript:this.print()" class="blacktext">打印此页</a></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td align="center"><table width="100%" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#CDD9EF" frame="hsides" style="border-collapse:collapse;">
            <tr align="center" valign="middle" bgcolor="#E8F1FF" class="litbluetext">
              <td width="85" height="35">车次</td>
              <td width="75" colspan="2">起始车站</td>
              <td width="75">到达车站</td>
              <td width="65" style="cursor:hand; cursor:pointer ; text-decoration:underline"><a style=" text-decoration:underline; color:#0D35B1" href="zhanzhan.asp?HomeCity=广州&amp;zhanming=上海&amp;sort=a&amp;">发车时间<img src='http://pages.ctrip.com/images/train/sort_down_x.gif'>          
              </a></td>
              <td width="65" style="cursor:hand; cursor:pointer; text-decoration:underline "><a style=" text-decoration:underline; color:#0D35B1" href="zhanzhan.asp?HomeCity=广州&amp;zhanming=上海&amp;sort=b&amp;">到站时间<img src='http://pages.ctrip.com/images/train/sort_down_x.gif'>   
              </a></td>
              <td width="75" style="cursor:hand; cursor:pointer ; text-decoration:underline"><a style=" text-decoration:underline; color:#0D35B1" href="zhanzhan.asp?HomeCity=广州&amp;zhanming=上海&amp;sort=c&amp;">走行时间<img src='http://pages.ctrip.com/images/train/sort_down_x.gif'>   
              </a></td>
              <td width="50">硬座</td>
              <td width="50">硬卧</td>
              <td width="50">软卧</td>
              <td width="65">软座</td>
              <td>始发站-终到站</td>
            </tr>
            
            <tr onmouseover="this.style.backgroundColor='#FDFFD8'" onmouseout="this.style.backgroundColor=''" align="center" valign="middle">
              <td height="25"><a href="checi.asp?checi=K528" class="redtext01zz">K528</a></td>
              
              <td style="border-right:0px"><img src="http://pic.ctrip.com/desinations/pic_start.gif"></td>现在想要:
    从第一个中提取出:
    “车次 类型 始发站 出发站 开车时间 目的站 到达时间 用时 里程 终点站 硬座 软座 硬卧中 软卧下
    K528 空调快速 广州 广州 08:08 上海南 次日04:10 20小时2分 1780 南京西 203 - 357 568 
    ……
    ……”
    这样的信息从第二个中提取出:
    车次 起始车站 到达车站 发车时间  到站时间  走行时间  硬座 硬卧 软卧 软座 始发站-终到站 
    K512  广州 上海南 09:01 05:38 20小时37分钟 152 271 424 - 三亚--上海南 
    ……
    ……这样的信息其实有N个这样的页面,是从不同的网站查询返回的,不知道能不能统一处理?
    现在的输入就是N个这样的页面的html,想要的输出就是像上面所说的那样。
    先谢谢大家……
      

  9.   

    需要htmlparser包。package html;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.filters.NodeClassFilter;
    import org.htmlparser.filters.OrFilter;
    import org.htmlparser.nodes.TextNode;
    import org.htmlparser.tags.TableColumn;
    import org.htmlparser.tags.TableRow;
    import org.htmlparser.util.ParserException;public class TestParser {

    public void readHTML(String u) throws IOException, ParserException {
    URL url = new URL(u);

    URLConnection conn = url.openConnection();
    conn.setConnectTimeout(1000);
    conn.setReadTimeout(2000);
    conn.setDoOutput(true);

    String encoding = "gb2312";

    InputStream is = conn.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding));

    StringBuffer sb = new StringBuffer();

    while (br.ready()) {
    sb.append(br.readLine());
    sb.append("\n");
    }

    String content = sb.toString();

    parserTable(content);
    }

    public void parserTable(String content) throws ParserException {
    Parser parser = Parser.createParser(content, "GB2312");

    NodeFilter trFilter = new NodeClassFilter(TableRow.class);

    OrFilter orFilter = new OrFilter();

    orFilter.setPredicates(new NodeFilter[]{trFilter});

    Node[] nodes = parser.parse(orFilter).toNodeArray();

    for (int i = 3; i < nodes.length; i++) {
    TableColumn[] tds = ((TableRow)nodes[i]).getColumns();

    for (int j = 0; j < tds.length; j++) {
    getText(tds[j].getChildrenAsNodeArray());
    }
    System.out.println();
    }
    }


    public void parserTable() throws ParserException {
    Parser parser = new Parser();
    parser.setEncoding("GB2312");
    parser.setURL("D:\\aaa.htm");

    NodeFilter trFilter = new NodeClassFilter(TableRow.class);

    OrFilter orFilter = new OrFilter();

    orFilter.setPredicates(new NodeFilter[]{trFilter});

    Node[] nodes = parser.parse(orFilter).toNodeArray();

    for (int i = 3; i < nodes.length; i++) {
    TableColumn[] tds = ((TableRow)nodes[i]).getColumns();

    for (int j = 0; j < tds.length; j++) {
    getText(tds[j].getChildrenAsNodeArray());
    }
    System.out.println();
    }
    }

    public void getText(Node[] n) {
    for (int k = 0; k < n.length; k++) {
    if (n[k] instanceof TextNode) {
    if (!"".equals(n[k].getText().trim())) {

    String info = n[k].getText().trim();

    while (info.getBytes().length < 30) {
    info += " ";
    }

    System.out.print(info);
    }
    } else {
    if (n[k].getChildren() != null) {
    getText(n[k].getChildren().toNodeArray());
    }
    }
    }
    }

    public static void main(String[] args) {

    TestParser t = new TestParser();

    //解析本地页面
    try {
    t.parserTable();
    } catch (ParserException e) {
    e.printStackTrace();
    }

    //解析网上页面
    // try {
    // t.readHTML("http://xxx.xxx.xxx");
    // } catch (IOException e) {
    // e.printStackTrace();
    // } catch (ParserException e) {
    // e.printStackTrace();
    // }
    }

    }
      

  10.   

    这是web信息抽取的知识,可以通过模板将格式一样的网页信息抽取出来