Проблемы Java URLConnection с целыми числами - PullRequest
1 голос
/ 27 октября 2011

Я пытался получить информацию с веб-страницы, в частности, с этого сайта: http://www.ncbi.nlm.nih.gov/pubmed?term=%22pulmonary%20disease%2C%20chronic%20obstructive%22%5BMesh%5D (среди прочих подобных). Я использую пакеты URL и URLConnection для этого. Я пытаюсь получить определенное число с веб-страницы - на этой странице я хочу общее количество статей (16428).

В верхней части страницы написано: «Результаты: от 1 до 20 из 16428», и когда я смотрю на источник страницы вручную, я могу найти это. Тем не менее, когда я пытаюсь использовать соединение 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 Ответ

2 голосов
/ 27 октября 2011

Я не могу воспроизвести вашу проблему и понятия не имею, почему это происходит. Возможно, он нюхает конкретные версии пользовательских программ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...