我目前正致力于使用Java获取特定网页的源代码。
网页为:http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do
我写了一些代码来做到这一点:
try{
URL url= new URL("http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do");
URLConnection urlConn = url.openConnection();
BufferedReader dis= new BufferedReader(new InputStreamReader((url.openStream())));
String s="";
while (( s=dis.readLine())!= null) {
System.out.println(s);
}
dis.close();
}catch (MalformedURLException mue) {}
catch (IOException ioe) {}
}
这很好用。
问题是我想“模拟”用户在Facoltà中选择“[1020] Dipartimento di Informatica”和Corso di Studio中的“[1102] Informatica e Tecnologie per la produzione del Software”,然后用户点击“ Avvia Ricerca“开始搜索并显示包含结果的表格。
目标是获取网页的源代码,其中还包含我需要的表格中的信息。
我注意到,如果我手动执行这些选择然后单击“Avvia Ricerca”开始搜索,则会再次加载网页,显示我需要的表格中的数据,但URL不会更改。
因此,即使页面现在显示我需要的数据,在使用我的代码时,我只能获取页面的源代码,因为它是在进行选择和搜索之前。
答案 0 :(得分:2)
之前我已经使用HTMLUnit(http://htmlunit.sourceforge.net)完成了类似的工作,非常适合模拟网站上的任何内容以及进行抓取。
答案 1 :(得分:0)
我建议在Web调试器(Ctrl-Shift-I)中打开页面,看看在做出选择时提取的URL,然后在Java应用程序中编程这些提取。 这种方法的缺点是,如果页面实现发生变化,您的代码将会中断。
另一种方法是在浏览器沙箱中运行页面Javascript。这也容易出错,甚至可能不安全。
答案 2 :(得分:0)
Normaly,您可以通过GET / POST发送此信息(例如使用url?department = xy),但在您的情况下它非常复杂,因为该站点使用JSF并生成ID(以及信息,哪个部门)被选中,写在那里,例如" http://www.studenti.ict.uniba.it/esse3/ListaAppelliOfferta.do;jsessionid=365EB9843B2872E73067693A6095BA35")。
根据您的目的,您可以使用Selenium(http://docs.seleniumhq.org/)。这将模拟浏览器,您可以获取元素(例如,按名称显示部门:fac_id),并设置值(例如,在创建select元素后使用selectByValue,在此处记录:http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/Select.html)。
如果您需要在不使用Selenium的情况下执行此操作(例如,因为您只需要在命令行上执行此操作而不使用浏览器本身),您可以尝试停用Cookie,然后参数应该在GET或POST中发送 - 参数,你可以检查一下,例如与Firebug。但那就是更难的解决方案,Selenium会更容易使用。