Веб-обход (страницы с поддержкой 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.опенка.селен.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-это статический crawler. Это означает, что он не может анализировать 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());
Comments