使用Jsoup刮擦Yahoo Answers

时间:2014-01-24 21:07:13

标签: java jsoup screen-scraping yahoo

我试图从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可能会阻止机器人有关吗?与此同时,我不认为这是真的。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

JSoup只使用静态HTML,它们无法解析这样的动态页面,在页面加载Ajax请求或JavaScript修改后下载内容。

尝试使用HTMLUnit阅读此页面,此解析器支持JS页面。

  

它具有相当好的JavaScript支持(不断改进),即使使用非常复杂的AJAX库也可以工作,根据您要使用的配置模拟Firefox或Internet Explorer。