Ama*_*mar 11 java web-crawler crawler4j
我对这个网络抓取非常新.我正在使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我能够抓取上述链接/网站中的内容.但它没有我在红色框中标记的信息.我认为那些是动态链接.
请有人帮我这个.
感谢和问候,Amar
嗨,我找到了另一个库的解决方法.我使用 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();
}
Run Code Online (Sandbox Code Playgroud)
这里的" htmlContent "是必需的.如果您遇到任何问题,请告诉我...... ???
谢谢,阿玛尔