到目前为止,我了解如何从这篇文章中搜索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();
这个答案对我不起作用。
答案 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());
}