我一直在尝试从网页上获取信息,特别是此网站: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“/>
有谁知道为什么这是/我如何解决它?
谢谢!
答案 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