2013-12-07 59 views
2

我正在嘗試創建一個用java編寫的應用程序,它使用我的大學課程搜索功能。我正在使用以下代碼的簡單http獲取請求:在Java中的屏幕抓取

public static String GET_Request(String urlToRead) { 

    java.net.CookieManager cm = new java.net.CookieManager(); 
    java.net.CookieHandler.setDefault(cm); 

    URL url; 
    HttpURLConnection conn; 
    BufferedReader rd; 
    String line; 
    String result = ""; 

    try { 

     url = new URL(urlToRead);  
     conn = (HttpURLConnection) url.openConnection();  
     conn.setRequestMethod("GET"); 
     rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((line = rd.readLine()) != null) { 
      result += line; 
    } 

    rd.close(); 

    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

但它不起作用。

這裏是網址我試圖刮: https://webapp4.asu.edu/catalog/classlist?c=TEMPE&s=CSE&n=100&t=2141&e=open&hon=F

我試圖尋找到jsoup但是當我去他們嘗試jsoup標籤,並把它拿來快到了相同的結果GET請求的URL正在提出。

我用http get request和jsoup得到的重複失敗的結果是,它提出了大學的搜索頁面,但沒有提供關於它們是否打開的實際類和信息。

我最終尋找的是一種抓取顯示班級是否有開放座位的網站。一旦我得到網頁的內容,我可以解析它,我只是沒有得到任何好的結果。

謝謝!

+0

你能製作一個能在你的瀏覽器中工作的URL嗎?那個似乎缺少請求參數。 –

+0

這個url *應該*在瀏覽器中工作...在這裏它再次.. https://webapp4.asu.edu/catalog/classlist?c=TEMPE&s=CSE&n=100&t=2141&e=open&hon=F –

+0

它的確如此,但它不會在我的瀏覽器中顯示搜索結果 - 它要求更多的輸入。 –

回答

1

您需要添加一個cookie來回答最初的課程設置問題:

類搜索課程目錄
表明您希望看到
*亞利桑那州立大學校園
* ASU在線哪些課程設置

您可以通過簡單地添加

conn.setRequestProperty("Cookie", "onlineCampusSelection=C"); 

HttpURLConnection

我使用Google Chrome的開發人員工具(Ctrl-Shift-I)找到了該cookie,並查看了Resources選項卡,然後展開Cookies查看了webapp4.asu.edu Cookie。

下面的代碼(主要是你的)獲取頁面的HTML你正在尋找:

public static void main(String[] args) { 
    System.out.println(download("https://webapp4.asu.edu/catalog/classlist?c=TEMPE&s=CSE&n=100&t=2141&e=open&hon=F")); 
} 

static String download(String urlToRead) { 
    java.net.CookieManager cm = new java.net.CookieManager(); 
    java.net.CookieHandler.setDefault(cm); 
    String result = ""; 
    try { 
     URL url = new URL(urlToRead); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Cookie", "onlineCampusSelection=C"); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 
     String line; 
     while ((line = rd.readLine()) != null) { 
      result += line + "\n"; 
     } 
     rd.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

雖然,我會使用一個真正的解析器像jsoupHTML Parser做實際的解析工作。

+0

感謝它的工作! –