【问题标题】:Java Webcrawler that searches for keyword搜索关键字的 Java Webcrawler
【发布时间】:2015-03-21 16:42:26
【问题描述】:

我正在尝试让网络爬虫在网页上找到给定单词时返回 true。 return true 语句从不运行,所以我不能正确使用它。任何人都有一个简单的方法来做到这一点?谢谢

    public static boolean keywordSearch(String url, String keyword){
    String strTemp = "";
    try {
        URL my_url = new URL(url);
        BufferedReader br = new BufferedReader(new InputStreamReader(my_url.openStream()));
        while(null != (strTemp = br.readLine())){
            if (strTemp.contains(keyword)){
                return true;
            }
    }
    } catch (Exception ex) {
        System.out.println("Error: " + ex.getMessage());
    }
    return false;
}

【问题讨论】:

  • 你的方法对我有用。它返回true 用于在该问题的URL 中搜索单词“keyword”。为什么您认为它不起作用,您能否提供一个示例 URL 和关键字,它应该起作用但不起作用?

标签: java web web-crawler


【解决方案1】:

首先使用如下方法读取 URL 的内容:

public static String getText(String url) throws Exception {
    URL website = new URL(url);
    URLConnection connection = website.openConnection();
    BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                    connection.getInputStream()));

    StringBuilder response = new StringBuilder();
    String inputLine;

    while ((inputLine = in.readLine()) != null) 
        response.append(inputLine);

    in.close();

    return response.toString();
}

然后检查URL的内容是否包含这样的关键字:

String content = URLConnectionReader.getText("http://www.someurl.com/page.html");
if(content.contains("someKeyword"))
{
    // content of url contains keyword
}

【讨论】:

  • 为什么要用页面的全部内容填充内存?如果是几 GB 怎么办?
  • 完美,谢谢!我知道如果它是一个非常大的页面会发生什么,但是它可以满足我的需要。你能分享一下你会怎么做吗?
  • @RealSkeptic 我无法想象网页的来源会是千兆字节。网页的源代码通常以 KB 为单位,通常小于 1 MB。
  • @DallasSeroski 您可以将 getText() 函数更改为 keywordSearch() 并让它也接受关键字字符串参数。将while循环更改为:while ((inputLine = in.readLine()) != null){ response.append(inputLine); if(response.contains(keyword)) in.close(); return true; },然后将return response.toString();更改为return false;
  • 您没有采取任何措施来确保您的输入实际上是text/html 页面,或者它不超过特定大小。除此之外,将数据加载到内存中是完全多余的,即使它只有 1k。您没有保存读取,也没有实现原始程序中没有的任何内容。
猜你喜欢
  • 2018-08-05
  • 2015-04-02
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2019-12-13
  • 2012-02-22
  • 2010-10-07
相关资源
最近更新 更多