我试图从Yahoo Answers中搜索关键字搜索结果,在我的案例中,“酒精成瘾”。我正在使用Jsoup和URL修改来浏览搜索结果的页面以刮取结果。但是,我注意到,即使我输入“最新”结果的URL,它仍然显示“相关性”结果,更糟糕的是,结果与浏览器上显示的结果不完全相同。
例如,最新结果的网址是: http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=1&sort=new
对于相关结果,网址为: http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=1&sort=rel
当你转到下一页时,“1”将变为2,3,4等(每页有10个结果)。
这是我为刮页而做的事情:
String urlID = "";
String end = "&sort=new";
String glob = "http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=";
Integer forumID = 0;
while(nextPageIsThere){
forumID++;
System.out.println("Now extracting the page: "+forumID);
try {
urlID = glob+forumID+end;
System.out.println(urlID);
exdoc = Jsoup.connect(urlID).get();
java.util.Date date= new java.util.Date();
} catch (IOException e) {
e.printStackTrace();
}
...
更令人困惑的是,即使我增加了页码,系统输出也显示网址正在变为:
http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=2&sort=new
和
http://answers.yahoo.com/search/search_result?p=alcohol+addiction&s=3&sort=new
它仍然一遍又一遍地刮擦第1页所示的同一页面。我知道我的代码没错。我已经调试了好几个小时了。我认为这与Jsoup.connect和/或Yahoo可能会阻止机器人有关吗?与此同时,我不认为这是真的。
有谁知道为什么会这样?
答案 0 :(得分:1)
JSoup只使用静态HTML,它们无法解析这样的动态页面,在页面加载Ajax请求或JavaScript修改后下载内容。
尝试使用HTMLUnit阅读此页面,此解析器支持JS页面。
它具有相当好的JavaScript支持(不断改进),即使使用非常复杂的AJAX库也可以工作,根据您要使用的配置模拟Firefox或Internet Explorer。