Web Scraping с Java с использованием HTMLUnit - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь очистить веб https://www.nba.com/standings#/

Вот мой код

Я пытаюсь использовать page.getByXPath ("// caption [@ class ='standings__header'] / span ")

Что должно отодвинуть Восточную конференцию и Западную конференцию, но вместо этого ничего не вытянет, я не понимаю, если мой Xpath неправильный?

    package Standings;

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.html.HtmlElement;
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
    import com.gargoylesoftware.htmlunit.html.HtmlSpan;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    public class Standings {
          private static final String baseUrl = "https://www.nba.com/standings#/";

        public static void main(String[] args) {
            WebClient client = new WebClient();
            client.getOptions().setJavaScriptEnabled(false);
            client.getOptions().setCssEnabled(false);
            client.getOptions().setUseInsecureSSL(true);
            String jsonString = "";
            ObjectMapper mapper = new ObjectMapper();

            try {
                HtmlPage page = client.getPage(baseUrl);
                System.out.println(page.asXml());

                page.getByXPath("//caption[@class='standings__header']/span")
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Использовали этот код для проверки вашей проблемы:

public static void main(String[] args) throws IOException {
    final String url = "https://www.nba.com/standings#/";

    try (final WebClient webClient = new WebClient()) {
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setUseInsecureSSL(true);

        HtmlPage page = webClient.getPage(url);
        webClient.waitForBackgroundJavaScript(10000);

        System.out.println(page.asXml());
    }
}

При запуске я получил кучу предупреждений и ошибок в журнале.

(Кстати, на странице также многоошибки / предупреждения при работе с реальными браузерами. Кажется, что сопровождающий страницы имеет интересный взгляд на качествосвойство: конструктор.(https://www.nba.com/ng/game/main.js#1)

Существует известная ошибка в поддержке JavaScript HtmlUnit (https://sourceforge.net/p/htmlunit/bugs/1897/). Поскольку ошибка генерируется из main.js, я думаю, это остановит обработку javascript страницы до того, какгенерируется содержимое, которое вы ищете.

Пока что я не нашел времени, чтобы это исправить (похоже, это нужно исправить в Rhino), но это есть в списке.

Естьпосмотрите https://twitter.com/HtmlUnit, чтобы получать информацию об обновлениях.

0 голосов
/ 09 января 2019

Странице, которую вы пытаетесь очистить, необходим Javascript для правильного отображения.Если вы отключите его, большинство элементов не будет загружаться.Изменение строки

client.getOptions().setJavaScriptEnabled(false);

на

client.getOptions().setJavaScriptEnabled(true);

должно помочь

...