как получить контент при веб-сканировании

введите здесь описание изображения

Привет! Я пытаюсь реализовать этот псевдокод для алгоритма паука для изучения Интернета. Нужна идея для моего следующего шага псевдокода: "использовать SpiderLeg для извлечения контента", у меня есть метод в другом классе SpiderLeg, у которого есть метод для получения всех URL-адресов этой веб-страницы, но мне интересно, как я могу использовать его в этом классе??

// method to crawl web and print out all URLs that the spider visit
public List<String> crawl(String url, String keyword) throws IOException{
    String currentUrl;
    // while list of unvisited URLs is not empty
    while(unvisited != null ){
        // take URL from list 
        currentUrl = unvisited.get(0);
       //using spiderLeg to fetch content   
        SpiderLeg leg = new SpiderLeg();
    }
    return unvisited;
}

Ваше здоровье!! Попробую это ... Однако я пробовал это без использования очереди DS, это почти работает, но не останавливает программу при поиске какого-либо слова.

И когда он находит, он показывает только ссылку на веб-страницу, а не все конкретные URL-адреса, где он находит слово. Интересно, можно ли так?

private static final int MAX_PAGES_TO_SEARCH = 10;
  private Set<String> pagesVisited = new HashSet<String>();
  private List<String> pagesToVisit = new LinkedList<String>();



public void crawl(String url, String searchWord)
  {
      while(this.pagesVisited.size() < MAX_PAGES_TO_SEARCH)
      {
          String currentUrl;
      SpiderLeg leg = new SpiderLeg();
      if(this.pagesToVisit.isEmpty())
      {
          currentUrl = url;
          this.pagesVisited.add(url);
      }
      else
      {
          currentUrl = this.nextUrl();
      }
      leg.getHyperlink(currentUrl);
      boolean success = leg.searchForWord(searchWord);
      if(success)
      {
          System.out.println(String.format("**Success** Word %s found at %s", searchWord, currentUrl));
          break;
      }
      this.pagesToVisit.addAll(leg.getLinks());
  }
  System.out.println("\n**Done** Visited " + this.pagesVisited.size() + " web page(s)");
  }

person Ka Mal    schedule 25.09.2015    source источник


Ответы (1)


Алгоритм сканирования по существу представляет собой поиск в ширину, вам нужно будет поддерживать очередь непросмотренных URL-адресов. и каждый раз, когда вы посещаете URL-адрес, вы удаляете его из очереди, и вам нужно будет помещать в очередь любые непросмотренные URL-адреса, которые вы найдете в своем парсере HTML (SpiderLeg).

Условия для добавления URL-адреса в очередь зависят от вас, но обычно вам нужно будет удерживать расстояние URL-адреса от начального URL-адреса в качестве точки остановки, чтобы вы не вечно пересекали Интернет. Эти правила могут также включать сведения о том, что вас интересует при поиске, чтобы вы добавляли только релевантные URL-адреса.

person kyleruss    schedule 25.09.2015
comment
Ваше здоровье!! Попробую это ... однако до сих пор я пробовал это без использования очереди DS , это работает, но не останавливает программу при поиске какого-либо слова. И когда он находит, он показывает только ссылку на веб-страницу, а не все конкретные URL-адреса, где он находит слово. Интересно, можно ли так? - person Ka Mal; 28.09.2015
comment
Пожалуйста, откройте другой вопрос с вашим обновленным кодом/попыткой - person kyleruss; 29.09.2015