Сканирование в Интернете (страницы с поддержкой Ajax/JavaScript) с использованием Java

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

введите описание изображения здесь

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

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

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...???

Пожалуйста, кто-нибудь может мне помочь в этом.

Спасибо и привет, Амар

3 ответа

Решение

Привет, я нашел обходной путь с другой библиотекой. Я использовал библиотеку 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" является обязательным. Пожалуйста, дайте мне знать, если у вас возникнут проблемы...???

Спасибо амар

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

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

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

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());
Другие вопросы по тегам