2017-04-08 71 views
0

從搜索查詢中選擇一個結果,我瞭解到目前爲止如何從這個帖子https://stackoverflow.com/a/15184407/4322850使用jsoup

搜索但我的問題是沒有這麼玉米粥至於如何使用jsoup執行查詢。這是更多的我如何選擇加載的東西。如果我去Google和搜索,我如何選擇其中一個返回的鏈接?

編輯: 這是問題問

我有一段HTML代碼,表示應該是對教師的目錄搜索小工具在大學

一個網站的一部分
<div id="right_column" class="content_main"> <div class="searchbox"> <form method="POST" action="/faculty/directory_search/" id="searchform"> <h4>Search the Directory</h4> <input type="text" name="searchterms" value="" /> <select name="category" class="dropdown"> <option value="all" selected="selected">All Categories</option> <option value="Faculty">Faculty</option> <option value="Staff">Staff</option> <option value="Visitors">Visitors</option> <option value="Full time">Full time</option> <option value="Visiting">Visiting</option> <option value="Special Appointment">Special Appointment</option> <option value="Biological Sciences">Biological Sciences</option> </select> <input type="hidden" name="sort" value="asc" /> <input type="submit" class="submit" value="Search directory" /> <a class="button" href="/faculty/index/desc" id="sortbutton">Sort Alphabetically</a> </form> <script type="text/javascript"> $('#searchform').ready(function(){ $('#sortbutton').click(function(){ $('input[name="sort"]').val('desc'); $('#searchform').submit(); return false; }); }); </script> </div> 

我想輸入姓名「John」,用jsoup使用下面的Java代碼提交搜索(適用於Android的,但它的整體是相同的Java代碼,作爲一個普通的Java應用程序)

Document doc = Jsoup.connect("http://www.qatar.cmu.edu/directory/").data("searchterms", "john").post(); 

但是,我不斷收到相同的頁面,只是「http://www.qatar.cmu.edu/directory/」沒有提交搜索。我注意到,在HTML代碼中有提交輸入類型。我想知道我是否必須提交搜索。如果是這樣,該怎麼辦?

這是問題

Document doc = Jsoup.connect("http://www.qatar.cmu.edu/faculty/directory_search/").data("searchterms", "john").data("sort", "asc").data("category", "all").post(); 

這個答案是不爲我工作的答案。

+0

發佈自己的自包含的問題,請,你不能有一半的問題在鏈接到另一個問題。 –

+0

這個答案適合你嗎? –

+0

那一個回答如何搜索,但是返回一個被搜索的頁面。我需要的是在這個搜索頁面之後實際選擇一些東西。防爆。我去Google搜索「Newegg」,現在返回的頁面是搜索結果。我想實際選擇搜索結果中的第一個鏈接。 –

回答

0

您不能使用Jsoup提交表單,而是在您手動提交表單時,監視瀏覽器上inspect元素的網絡選項卡。你會看到請求發送的是哪個url,哪種類型等。

我監視網絡選項卡,發現當我查詢約翰與類別,他們都發送http請求到這個url:http://www.qatar.cmu.edu/?feed=directory&q=john&category=0&subcategory=&employeeType=0&page=1。它響應一個json對象。您可以分析很容易

這裏是示例代碼來獲得搜索結果的JSON響應:

public static void main(String[] args) throws Exception { 
    JSONObject data = getJSONObjectFromUrl("http://www.qatar.cmu.edu/?feed=directory&q=john&category=0&subcategory=&employeeType=0&page=1"); 
    System.out.println(data); 
} 

private static JSONObject getJSONObjectFromUrl(String url) throws Exception { 
    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    // optional default is GET 
    con.setRequestMethod("GET"); 
    //add request header 
    con.setRequestProperty("User-Agent", "Mozilla/5.0"); 

    StringBuffer response; 
    try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) { 
     String inputLine; 
     response = new StringBuffer(); 
     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
    } 

    return new JSONObject(response.toString()); 
} 
+0

因此,如果我想用查詢來完成這個操作而不返回一個類別,它是否仍然會返回一個json對象? –

+0

@ A.Angee對不起,我不明白 –

+0

你說:「...當我用類查詢所有的約翰時,它響應一個json對象,你可以很容易地解析它。我的問題是,如果我不做所有類別,我還會返回一個json對象嗎?另外,這會返回1條,就像我上面給出的例子嗎? –