我写了个网页抓取的程序要抓取网页信息
已经可以抓到
<tr><td style="width:90px;">****</td><td title="******" style="width:169px;">******</td>
<td style="width:57px;">4</td><td style="width:57px;">38.6</td></tr>并且用
                    String s = textnode.toHtml();//这个就是那个抓取得到的<tr></tr>那一串
                    Pattern p = Pattern.compile("(?i)<td\\s+.*?>(.*?)</td>");
                    Matcher m = p.matcher(s);
                    while(m.find()) {
                        MailDao.writeFile("", m.group(1));
                    }
因为网页中有很多个<tr><td></td>....<td></td></tr>有时候如果串行的话比如
.....<td ...
>***</td>
那我想得到的***就截不出来了  求解决办法
最后那个writeFile是要写出生成excel的  所以<tr></tr>中截得的<td></td>中间数据是要分行输出的

解决方案 »

  1.   

    那个截取不到的例子应该是这样的
    ...<td...>***
    </td>...
    这样那个***就截取不出来了
      

  2.   

    不行 因为要生成excel表格  截取的数据要写到excel表格中
      

  3.   

    改成这样试试:
    Pattern p = Pattern.compile("(?i)(?s)<td\\s+.*?>(.*?)</td>");
      

  4.   

    那样虽然是解出来了  但也多截了个空串出来  输入到excel时候还是会串行
      

  5.   

    那空串应该是换行符之类的,replace掉。
      

  6.   

    这样?
    String s = textnode.toHtml().replaceAll("\r\n","");
    ...
    ...
    输出来还是不对
      

  7.   

    这样
    String s = textnode.toHtml();
    s = s.toString().replaceAll("\r\n","");
    也不行
      

  8.   

    这样:
    m.group(1).replaceAll("\\s", "")
      

  9.   

    得到的s在控制台还是两行输出的,得到excel还是串行
      

  10.   

    这个好使了  但是我想知道为什么我这样写
    String s = textnode.toHtml().replaceAll("\r\n","");
    就不好使呢
      

  11.   

    在用正则表达式替换的时候,\s 表示空白字符:[\t\n\x0B\f\r] 
      

  12.   

    呵呵,关键是这个换行符比较麻烦,
    比如:
          新行(换行)符 ('\n')、 
          后面紧跟新行符的回车符 ("\r\n")、 
          单独的回车符 ('\r')、 
    所以,用 \s 替换比较保险。