Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试在web爬网时查找特定链接_Java_Regex_Web Crawler - Fatal编程技术网

Java 尝试在web爬网时查找特定链接

Java 尝试在web爬网时查找特定链接,java,regex,web-crawler,Java,Regex,Web Crawler,我正在修改[crawler4j][1]中给出的代码。我想在抓取网站时找到特定的链接。例如,我正在www.cmu.edu上爬行,并试图获取目录搜索的链接。这是我的密码- public void visit(Page page) { String url = page.getWebURL().getURL(); // System.out.println("URL: " + url); if (page.getParseData() instanceof Ht

我正在修改[crawler4j][1]中给出的代码。我想在抓取网站时找到特定的链接。例如,我正在www.cmu.edu上爬行,并试图获取目录搜索的链接。这是我的密码-

public void visit(Page page) {          
    String url = page.getWebURL().getURL();
//  System.out.println("URL: " + url);

    if (page.getParseData() instanceof HtmlParseData) {
        HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
        String text = htmlParseData.getText();
        String html = htmlParseData.getHtml();
        System.out.println(html.matches(".*<a href.*."));
        if (html.matches(".*.<a href=.*.>Directory Search</a>.*."))
            System.out.println("***********Hello*********************");
        //  System.out.println("----------"+html);
        return;
//      List<WebURL> links = htmlParseData.getOutgoingUrls();
    }
}
此代码不起作用。我的控制台上没有直升机。为了检查,我在控制台中打印了html字符串,复制了包含目录sreach的锚标记,并编写了以下简单的两行代码-

String test2="<li class=\"first\"><a href=\"http://directory.andrew.cmu.edu/\" title=\"Carnegie Mellon University Faculty, Staff and Student Directory\">Directory Search</a></li>";
System.out.println("*******"+test2.matches(".*.<a href=.*.>Directory Search</a>.*."));
这很有效。字符串test2的值是从控制台复制的。代码的第一部分我做错了什么

试试这个,你必须使用?s来匹配新行字符

String test2="qwert\n\n<li class=\"first\"><a href=\"http://directory.andrew.cmu.edu/\" title=\"Carnegie Mellon University Faculty, Staff and Student Directory\">Directory Search</a></li>";
System.out.println("*******"+test2.matches("(?s).*.<a href=.*.>Directory Search</a>.*."));

你确定htmlParseData.getHtml正在返回某些内容吗?@Savanna-是的,它正在返回整个html代码。我确实在控制台上打印了它,并仅从中复制了字符串test2的值。不,真的,只是不要。