繁体   English   中英

使用jsoup从搜索查询中选择结果

[英]Choosing a result from a search query using jsoup

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

但是我的问题不是如何使用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”并使用以下Java代码使用jsoup提交搜索(打算用于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();

这个答案对我不起作用。

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

我监视了“网络”选项卡,发现当我查询所有类别的john时,他们都向该url发送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());
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM