我一直在尝试从网页中获取信息,尤其是以下网站:http://www.ncbi.nlm.nih.gov/pubmed?term=%22pulmonary%20disease%2C%20chronic%20obstructive%22%5BMesh%5D(以及其他类似网站)。我正在使用URL和URLConnection包来这样做。我正在尝试从网页中获取特定数量-在此页面上,我希望文章总数(16428)。

它在页面顶部附近显示:“结果:16428的1到20”,当我手动查看页面源代码时,便可以找到它。但是,当我尝试使用Java连接从页面源获取此数字时,由于某种原因,它获取的数字是“ 863399”而不是“ 16428”。

码:

    URL connection = new URL("http://www.ncbi.nlm.nih.gov/pubmed?term=%22pulmonary%20disease%2C%20chronic%20obstructive%22%5BMesh%5D");
    URLConnection yc = connection.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    String html = "";
    String inputLine;
    while ((inputLine = in.readLine()) != null) html += inputLine;
    in.close();


    int startMarker = html.indexOf("ncbi_resultcount");
    int endMarker = html.indexOf("ncbi_op");

    System.out.println(html.substring(startMarker, endMarker));


运行此代码时,我得到:


  ncbi_resultcount“ content =” 863399“ />


而不是:


  ncbi_resultcount“ content =” 16428“ />


有谁知道这是为什么/我该如何解决?

谢谢!

最佳答案

我无法重现您的问题,也不知道为什么会这样。也许是在嗅探特定的Java用户代理版本。然后,您需要尝试将User-Agent标头设置为其他内容,以假装为“真实的”网络浏览器。

yc.setRequestProperty("User-Agent", "Mozilla");




与具体问题无关,我建议对此工作使用真正的HTML解析器,例如Jsoup。然后就这么简单:

Document document = Jsoup.connect("http://www.ncbi.nlm.nih.gov/pubmed?term=%22pulmonary%20disease%2C%20chronic%20obstructive%22%5BMesh%5D").get();
Element nbci_resultcount = document.select("meta[name=ncbi_resultcount]").first();
System.out.println(nbci_resultcount.attr("content")); // 16433

10-07 13:49