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

标签 java performance web-crawler

我从以下网站获得了爬虫列表: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/ 中获取了这段代码

关于java - 通过 Java 中的包含检查爬虫 IP 列表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359315/

相关文章:

java - Google AnalyticsService 抛出 java.lang.reflect.UndeclaredThrowableException

mysql - 将条件求和结果保存到变量 MySQL 中

Python Scrapy - 从 mysql 填充 start_urls

python - 如何基于Scrapy搭建一个永远运行的网络爬虫?

python - 试图用 scrapy 抓取网页的所有链接。但是我无法在页面上输出链接

java - 如何在for循环中动态调用Java Bean的方法

java - 在 JOPTIONPANE 中禁用空格键和回车键

java - 使用部分键获取 HashMap 的值

c++ - 成员与全局阵列访问性能

javascript - 放弃(Web 开发)元素文件夹中的子文件夹对性能有好处吗?