[英]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.