我复制了相同的代码并尝试执行,但它显示以下异常。请检查一下。您是否得到相同的例外情况。如果不是,请提供HtmlUnit API的链接以确保我尝试了同样的事情。
public class Program{
public static void main(String[] args) throws FailingHttpStatusCodeException, IOException {
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
WebRequest request = new WebRequest(new URL("http://www.firstpost.com/tag/crime-in-india"));
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);
HtmlPage page = webClient.getPage(request);
webClient.waitForBackgroundJavaScript(10000);
List<HtmlAnchor> anchors1 = page.getAnchors();
HtmlAnchor link2 = null;
for (HtmlAnchor anchor : anchors1) {
if (anchor.asText().indexOf("Why do we care more when NRIs go missing?") > -1) {
link2 = anchor;
break;
}
}
page = link2.click();
webClient.waitForBackgroundJavaScript(10000);
DomNodeList<DomElement> paras = page.getElementsByTagName("p");
for (DomElement el : paras.toArray(new DomElement[paras.size()])) {
System.out.println(el.asText());
}
}
}
答案 0 :(得分:2)
您可以将Jsoup
和HtmlUnit
的组合用于您的目的。如果您想动态“点击”这些链接并抓取结果页面的内容,HtmlUnit
会有所帮助。您可以累积这些锚标记的文本来迭代所有锚标记,Jsoup
也有助于累积那些可以在HtmlUnit
之后使用的超链接的文本 - 但是需要花费2个连接
以下是从您的网站网址抓取其中一个超链接中的数据的代码示例,请注意我提供您的基本网址,然后检查特定链接以获取其内容 - 您可以选择一组特定的链接页面取决于模式。
它遍历您链接,单击它并检索您要查找的特定数据集。
<强>代码:强>
public static void main(String[] args)
throws FailingHttpStatusCodeException, IOException {
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
WebRequest request = new WebRequest(new URL(
"http://www.firstpost.com/tag/crime-in-india"));
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptTimeout(10000);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setTimeout(10000);
HtmlPage page = webClient.getPage(request);
webClient.waitForBackgroundJavaScript(10000);
List<HtmlAnchor> anchors1 = page.getAnchors();
HtmlAnchor link2 = null;
for (HtmlAnchor anchor : anchors1) {
if (anchor.asText().indexOf(
"Why do we care more when NRIs go missing?") > -1) {
link2 = anchor;
break;
}
}
page = link2.click();
webClient.waitForBackgroundJavaScript(10000);
DomNodeList<DomElement> paras = page.getElementsByTagName("p");
for (DomElement el : paras.toArray(new DomElement[paras.size()])) {
System.out.println(el.asText());
}
}
打印新闻文章内容:
答案 1 :(得分:1)
我相信它会特定于页面,因为所有页面都有不同的结构。您想从中获取数据的网站数量是多少?如果它只有5或6,那么你可能想要为它们中的每一个单独编码。