Веб-сканирование (страницы с поддержкой Ajax/JavaScript) с использованием java

Я очень новичок в этом веб-обходе. Я использую crawler4j для сканирования веб-сайтов. Я собираю необходимую информацию, просматривая эти сайты. Моя проблема здесь в том, что я не смог выполнить сканирование содержимого для следующего сайта. http://www.sciencedirect.com/science/article/pii/S1568494612005741. Я хочу сканировать следующую информацию с вышеупомянутого сайта (см. Скриншот).

enter image description here

Если вы видите прикрепленный скриншот, у него есть три имени (выделено красным цветом). Если вы щелкните по одной из ссылок, вы увидите всплывающее окно, и всплывающее окно содержит всю информацию об этом авторе. Я хочу обходить информацию, которая есть в этом всплывающем окне.

Я использую следующий код для обхода содержимого.

public class WebContentDownloader {

private Parser parser;
private PageFetcher pageFetcher;

public WebContentDownloader() {
    CrawlConfig config = new CrawlConfig();
    parser = new Parser(config);
    pageFetcher = new PageFetcher(config);
}

private Page download(String url) {
    WebURL curURL = new WebURL();
    curURL.setURL(url);
    PageFetchResult fetchResult = null;
    try {
        fetchResult = pageFetcher.fetchHeader(curURL);
        if (fetchResult.getStatusCode() == HttpStatus.SC_OK) {
            try {
                Page page = new Page(curURL);
                fetchResult.fetchContent(page);
                if (parser.parse(page, curURL.getURL())) {
                    return page;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } finally {
        if (fetchResult != null) {
            fetchResult.discardContentIfNotConsumed();
        }
    }
    return null;
}

private String processUrl(String url) {
    System.out.println("Processing: " + url);
    Page page = download(url);
    if (page != null) {
        ParseData parseData = page.getParseData();
        if (parseData != null) {
            if (parseData instanceof HtmlParseData) {
                HtmlParseData htmlParseData = (HtmlParseData) parseData;
                return htmlParseData.getHtml();
            }
        } else {
            System.out.println("Couldn't parse the content of the page.");
        }
    } else {
        System.out.println("Couldn't fetch the content of the page.");
    }
    return null;
}

public String getHtmlContent(String argUrl) {
    return this.processUrl(argUrl);
}
}

Мне удалось выполнить сканирование содержимого из вышеупомянутой ссылки/сайта. Но у него нет информации, которую я обозначил в красных ящиках. Я думаю, что это динамические ссылки.

  • Мой вопрос: как я могу сканировать контент из вышеупомянутой ссылки/веб-сайта...???
  • Как сканировать контент с веб-сайтов на основе Ajax/JavaScript...???

Пожалуйста, помогите мне в этом.

Спасибо и с уважением, Амар

Ответ 1

Привет, я нашел обходной путь с другой библиотекой. я использовал Библиотека Selinium WebDriver (org.openqa.selenium.WebDriver) для извлечения динамического содержимого. Вот пример кода.

public class CollectUrls {

private WebDriver driver;

public CollectUrls() {
    this.driver = new FirefoxDriver();
    this.driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

protected void next(String url, List<String> argUrlsList) {
    this.driver.get(url);
    String htmlContent = this.driver.getPageSource();
}

Здесь " htmlContent" является обязательным. Пожалуйста, дайте мне знать, если вы столкнулись с любыми проблемами...???

Спасибо, Амар

Ответ 2

Проще говоря, Crawler4j является статическим искателем. Это означает, что он не может разобрать JavaScript на странице. Таким образом, вы не можете получить контент, который вы хотите, сканировав эту конкретную страницу, о которой вы говорили. Конечно, есть некоторые способы решения этой проблемы.

Если именно эта страница вы хотите обходить, вы можете использовать отладчик соединения. Ознакомьтесь с этим вопросом для некоторых инструментов. Узнайте, на какую страницу вызывается запрос AJAX-запроса, и выполните обход этой страницы.

Если у вас есть различные веб-сайты с динамическим контентом (JavaScript/ajax), вам следует рассмотреть возможность использования искателя с поддержкой динамического контента, например Crawljax (также написано на Java).

Ответ 3

I have find out the Solution of Dynamic Web page Crawling using Aperture and Selenium.Web Driver.
Aperture is Crawling Tools and Selenium is Testing Tools which can able to rendering Inspect Element. 

1. Extract the Aperture- core Jar file by Decompiler Tools and Create a Simple Web Crawling Java program. (https://svn.code.sf.net/p/aperture/code/aperture/trunk/)
2. Download Selenium. WebDriver Jar Files and Added to Your Program.
3. Go to CreatedDataObjec() method in org.semanticdesktop.aperture.accessor.http.HttpAccessor.(Aperture Decompiler).
Added Below Coding 

   WebDriver driver = new FirefoxDriver();
   String baseurl=uri.toString();
   driver.get(uri.toString());
   String str = driver.getPageSource();
        driver.close();
 stream= new ByteArrayInputStream(str.getBytes());