从一组url中提取必要的url

时间:2014-01-26 08:28:06

标签: java arraylist jsoup

我复制了相同的代码并尝试执行,但它显示以下异常。请检查一下。您是否得到相同的例外情况。如果不是,请提供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());
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以将JsoupHtmlUnit的组合用于您的目的。如果您想动态“点击”这些链接并抓取结果页面的内容,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());
        }
    }

打印新闻文章内容:

enter image description here

答案 1 :(得分:1)

我相信它会特定于页面,因为所有页面都有不同的结构。您想从中获取数据的网站数量是多少?如果它只有5或6,那么你可能想要为它们中的每一个单独编码。