2017-04-08 70 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条,就像我上面给出的例子吗? –