Хтось знає, чи веб-сканер, описаний тут використовує пошук у глибині першої чи першої ширини? Мій інстинкт говорить, що це "перший пошук у широту, але я не впевнений у цьому на 100%.
Також, чи звичайна річ веб-сканеру використовувати ці способи пошуку (зокрема, за допомогою рекурсії)?
Відповіді:
2 для відповіді № 1Це глибокий перший пошук. Зверніть увагу на цей код:
//get all links and recursively call the processPage method
Elements questions = doc.select("a[href]");
for(Element link: questions){
if(link.attr("href").contains("mit.edu"))
processPage(link.attr("abs:href"));
}
Цей код буде рекурсивно вивчати всі посиланнязнайдений на сторінці, повністю вивчивши перше посилання та все, що доступно, потім друге посилання та все, що доступне тощо. Отже, це досліджується у глибині першої моди.
Однак це буде дійсно повільно, тому що лише одна нитка робить церозвідка. Це, мабуть, було б набагато ефективніше, якби воно було переписане як модифікований BFS, який ставив невивчені сторінки до робочого списку і мав купу ниток, які захоплювали невивчені сторінки та обробляли їх.
Також не дуже корисно використовувати рекурсію, колививчення веб-посилань. Якщо ви спробуєте це зробити, ви легко підірвете стек викликів, оскільки будь-який достатньо великий веб-сайт матиме посилання, які проходять повсюдно.
Сподіваюся, це допомагає!