使用jsoup

时间:2017-04-08 02:31:45

标签: java jsoup

到目前为止,我了解如何从这篇文章中搜索https://stackoverflow.com/a/15184407/4322850

但我的问题并不是如何使用jsoup执行查询。它更多的是如何选择加载的东西。如果我去谷歌搜索,如何选择其中一个返回的链接?

修改: 这是问的问题

我有一段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> 

我正在尝试输入名称&#34; john&#34;并使用以下java代码使用jsoup提交搜索(适用于Android,但它与普通java应用程序的整体Java代码相同)

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

但是,我一直在和#34; http://www.qatar.cmu.edu/directory/&#34;没有提交搜索。我注意到在html代码中有提交输入类型。我想知道是否必须提交搜索。如果是这样,怎么办呢?

这是该问题的答案

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

这个答案对我不起作用。

1 个答案:

答案 0 :(得分:0)

您无法使用Jsoup提交表单,而是在手动提交表单时,在浏览器上监视inspect元素的网络选项卡。您将看到请求发送的URL,类型等。

我已经监控网络选项卡,发现当我用类别查询john时,他们正在向此网址发送http get请求: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());
}