2010-11-17 3 views
2

У меня есть рабочий код (измененный здесь и там, поэтому вы используете свой мозг при копировании и вставке). Я бы хотел улучшить его, чтобы он обнаружил все недопустимые страницы, включая домены для продажи. Он работает примерно на 89%. Если вы видите что-либо, что я мог бы улучшить, используя дополнительные существующие библиотеки или небольшие настройки, которые были бы удивительными.Java Multi Link Checker Spider - необходимы улучшения

List all = linkService.getAllLinks(); 
    notValidLinks = new LinkedList(); 
    final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(39867); 
    int poolSize = 90; 
    int maxPoolSize = 100; 
    long keepAliveTime = 40; 
    ThreadPoolExecutor tpe = new ThreadPoolExecutor(poolSize, maxPoolSize, 
      keepAliveTime, TimeUnit.SECONDS, queue); 

    for (link : all) { 
     Thread task = new CheckSite(link); 
     tpe.execute(task); 
     System.out.println("Task count:" + queue.size()); 
    } 

class CheckSite extends Thread { 
    Link link; 

    CheckSite(Link link) { 
     this.link = link; 
    } 

    public void run() { 
     boolean notValid = false; 
     try { 
      log.info(link.getLink() + " " + link.getId()); 
      URL u = new URL(link.getLink()); 
      HttpURLConnection huc = (HttpURLConnection) u.openConnection(); 
      HttpURLConnection.setFollowRedirects(false); 
      huc.setConnectTimeout(40000); 
      huc.setRequestMethod("GET"); 
      huc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"); 

      huc.connect(); 
      int code = huc.getResponseCode(); 

      if (code != HttpURLConnection.HTTP_OK 
        && code != HttpURLConnection.HTTP_MOVED_PERM 
        && code != HttpURLConnection.HTTP_MOVED_TEMP){ 
       notValid = true; 
       log.info("Invalid code: " + code + " - " + link.getLink()); 
      } 
      if (code == HttpURLConnection.HTTP_MOVED_PERM) { 
       log.info(link.getLink() + " Perm move"); 
      } 
      if (code == HttpURLConnection.HTTP_MOVED_TEMP) { 
       log.info(link.getLink() + " Temp move"); 
      } 

      try { 
       if (!notValid) { 
        BufferedReader reader = new BufferedReader(new InputStreamReader(huc.getInputStream())); 
        StringBuilder stringBuilder = new StringBuilder(); 

        String line; 
        while ((line = reader.readLine()) != null) { 
         stringBuilder.append(line); 
        } 

        notValid = StringUtils.containsIgnoreCase(Jsoup.parse(stringBuilder.toString()).text(), "Related Searches"); 

       } 
      } catch (Exception e) { 
        log.error(e.getMessage()); 
      } 

      huc.disconnect(); 
     } catch (MalformedURLException me) { 
      log.info("Malformed URL:" + link.getLink()); 
      notValid = true; 
     } catch (IOException e) { 
      log.info("Refused connection | Does not exist:" + link.getLink()); 
      notValid = true; 
     } 
     if (notValid) { 
      link.setApproved(false); 
      link.setDateApproved(null); 
      notValidLinks.add(linkService.save(link)); 

     } 
     log.debug("URL Finieshed!"); 
    } 
} 
+0

Определите «эффективность». –

ответ

1

Отъезд Bloom Filter[wiki]. Это поможет вам быстро и эффективно использовать память. Проблема с фильтром Bloom заключается в том, что он будет ложным срабатыванием, т.е. он скажет правду о вещах, которых там нет. Но если фильтр Bloom говорит false, это неверно.

1

Я хотел бы, чтобы улучшить его, чтобы он обнаруживает все страницы, которые являются недопустимыми , включая домены на продажу.

Я подозреваю, что выделенная часть непрактична. Как паук должен быть в состоянии сказать, что домен продается?

РАЗВЕЙТЕ

@Mat Banik предлагает искать для конкретной фразы или проверки DNS записей в качестве возможных решений.

  • Эвристика, которая проверяет определенную фразу, даст ложные срабатывания и ложные отрицания.

  • Проверка записей DNS сложна в Java. Вы можете выполнить простой поиск DNS в части имени хоста URL-адреса и проверить полученный IP-адрес на известный список IP-адресов парковки DNS. Но это не говорит вам, действительно ли оригинальное имя хоста продается. Это может быть настоящий сайт, размещенный в той же инфраструктуре ... или припаркованный домен, который НЕ продается.

Но я думаю, что если вы готовы принять ложные срабатывания и негативы, тогда можно попытаться отфильтровать домены для продажи.