【问题标题】:Trying to find specific links while web crawling尝试在网络爬网时查找特定链接
【发布时间】:2014-07-14 20:03:45
【问题描述】:

我正在修改 [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();
    }
}

此代码不起作用。我没有在我的控制台上获得 *******Helo*********。只是为了检查我在控制台中打印了 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>.*."));

这行得通。 String test2 的值是从控制台复制的。我在代码的第一部分做错了什么?

[1]

【问题讨论】:

  • 你确定 htmlParseData.getHtml() 正在返回一些东西吗?
  • @Savanna - 是的,它正在返回整个 html 代码。我确实在控制台上打印了它并仅从中复制 String test2 的值。
  • Don't parse HTML with regexes. 不,真的,只是不要。

标签: java regex web-crawler


【解决方案1】:

试试这个(你必须使用(?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>.*."));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2016-05-26
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多