http://www.worldmetals.com.cn/search/metsearch.jsp?search=(铁矿石)%20and%20docchannel=(36)该地址在IE中能得到正常的结果,但无论是用java.net来抓取,还是用Socket来抓取,都只能抓取出结果集为0的页面来。尝试用URLEncoder.encode好像也没解决问题

解决方案 »

  1.   

    使用 URLEncoder.encode 时,选择 utf-8 编码或者试试String url = "http://www.worldmetals.com.cn/search/metsearch.jsp?search=(铁矿石)%20and%20docchannel=(36)";
    url = new String(url.getBytes("utf-8"), "iso-8859-1");其中的原理参考:
    http://www.regexlab.com/zh/encoding.htm
      

  2.   

    使用
    http://www.worldmetals.com.cn/search/metsearch.jsp?search=(铁矿石)%20and%20docchannel=(36)这种方式编码
      

  3.   

    To:
    sswater(光杆兵) 
    使用 URLEncoder.encode 时,选择 utf-8 编码,这个我选择了,不行
    url = new String(url.getBytes("utf-8"), "iso-8859-1");我也曾经测试过,但出来的是全部的结果集,不是正常在页面中和IE浏览一样的结果。
    To:
    akirya(坏[其实偶不是什么所谓的坏人]) 
    你给的编码和我自己的编码没有区别呀?有没有其他的解决方法呀!
      

  4.   

    URL url = new URL("http://www.worldmetals.com.cn/search/metsearch.jsp?" + URLEncoder.encode("search=(铁矿石)%20and%20docchannel=(36)", "UTF-8"));
      

  5.   

    To CrazyGou,还是不行呀,下面是我的程序
     
    import java.net.URLEncoder;
    public class Test {

    public static void main(String[] args) throws Exception
    {
    try
    {
    String url = "";


    url = "http://www.worldmetals.com.cn/search/metsearch.jsp?" + URLEncoder.encode("search=(铁矿石) and docchannel=(36)", "UTF-8");
    Test testWebConn = new Test();
    testWebConn.getHtml(url);
    }
    catch(Exception ex)
    {

    }
    }

    public void getHtml(String url)
    {
    try
    {

    String sCurrentLine;   String sTotalString;   sCurrentLine="";   sTotalString="";   java.io.InputStream l_urlStream;   System.out.println(url);
    java.net.URL l_url = new java.net.URL(url);   java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();   l_connection.connect();  
    //l_urlStream = l_url.openStream();
    l_urlStream = l_connection.getInputStream();  

    java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));   while ((sCurrentLine = l_reader.readLine()) != null)   {  
     if(sCurrentLine.indexOf("共命中")>0&&sCurrentLine.indexOf("篇文章")>0)
       {
       System.out.println(sCurrentLine);
       break;
       }
    //sTotalString+=sCurrentLine+"\n";   }  
    System.out.println(sTotalString);
    }
    catch(Exception ex)
    {
    System.out.println(ex.toString());
    }
    }
    }
      

  6.   

    仅仅把 "铁矿石" 三个字进行 UrlEncode 试试
      

  7.   

    To sswater(光杆兵)试过呀,可惜没用,有时间你能帮我调试一下吗,程序在上面,真的很奇怪
    下面这个地址直接在IE中也能浏览
    http://www.worldmetals.com.cn/search/metsearch.jsp?search=%28%CC%FA%BF%F3%CA%AF%29+and+docchannel%3D%2836%29
    但放在java中去抓取就不可以了??多谢了
      

  8.   

    to 楼上:
    是应该只对参数进行编码,但我试了一下也不行
    可能有其他方面的限制,比如请求的header
      

  9.   

    To CrazyGou() 分析头文件为:
    HTTP/1.1 200 OK
    Date: Thu, 24 May 2007 03:42:59 GMT
    Server: IBM_HTTP_SERVER/1.3.19.3  Apache/1.3.20 (Win32)
    Set-Cookie: JSESSIONID=0000OQ1AS0ENLEHAPX2IXG4VCQY:vdebn6i3;Path=/
    Cache-Control: no-cache="set-cookie,set-cookie2"
    Expires: Thu, 01 Dec 1994 16:00:00 GMT
    Transfer-Encoding: chunked
    Content-Type: text/html;charset=gb2312
    Content-Language: zh开始怀疑是chunked的问题,但发现http://www.worldmetals.com.cn/search/metsearch.jsp?search=(china)%20and%20docchannel=(36)能正常抓取所以怀疑是中文传递的问题,对里面的url进行多次转码,可还是抓不到想要的结果集
      

  10.   

    经验证,如果参数中有中文,这个header是必须的:
    accept-language   zh-cn
      

  11.   

    l_connection.addRequestProperty("accept-language", "zh-cn");
      

  12.   

    To: CrazyGou()问题已经解决,多谢,