Skip to main content
 首页 » 编程设计

java之通过 Java 中的包含检查爬虫 IP 列表的最快方法

2023年09月28日237daizhj

我从以下网站获得了爬虫列表:http://www.karavadra.net/blog/2010/list-of-crawlers-bots-and-their-ip-addresses/#respond

如果您知道更好的定期更新的 IP 列表,请告诉我。

现在我创建了对象:

 private static final HashSet<String> list = new HashSet<String>(){{ 
        add("66.249.71.248"); 
        add("66.249.66.38"); 
        add("66.249.65.142"); // 331 more entires 
 }};  

我正在通过这种方法检查列表:

public static boolean isCrawler(String ip){ 
  return list.contains(ip);   
} 

请建议如何改进它,使其成为更快、更优雅的解决方案。我使用 spring,所以 beans 也是一种选择。

我想在列表中集成更新服务,但我没有找到有用的可下载 IP 列表,并且通过 Jsoup 解析网站从来都不是理想的解决方案。

请您参考如下方法:

如果我对你的理解是正确的,我想让你的 contains() 检查更快。

尽管我相信 HashSet 的 contains() 无论如何都能正常工作,但我认为在您的情况下您可以稍微改进一下。

您将 IP 地址存储为字符串。 IP地址实际上是数字。将 IP 转换为数字并将结果放入集合中。这有望更快地发挥作用。

这里是如何将 IP 转换为数字:

public static Long ipToInt(String addr) { 
        String[] addrArray = addr.split("\\."); 
 
        long num = 0; 
        for (int i=0;i<addrArray.length;i++) { 
            int power = 3-i; 
 
            num += ((Integer.parseInt(addrArray[i])%256 * Math.pow(256,power))); 
        } 
        return num; 
    } 

我从 http://teneo.wordpress.com/2008/12/23/java-ip-address-to-integer-and-back/ 中获取了这段代码