Java URLConnection问题与整数

时间:2011-10-27 15:37:11

标签: java url

我一直在尝试从网页上获取信息,特别是此网站: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“/>

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

谢谢!

1 个答案:

答案 0 :(得分:2)

我无法重现你的问题,我不知道为什么会这样。也许它正在嗅探特定的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