2014-11-06 1 views
0

Я реализовал базовый искатель, который извлекает данные из семенных Urls и может загружать страницы. в дальнейшем я могу сохранить свой искатель на одном сайте семян до тех пор, пока не будет достигнута указанная глубина. Как я могу наложить больше ограничений на свой искатель, так как страница загружается, только если проходит минимальный порог предопределенных ключевых слов? Есть ли такой способ в функции shouldvisit()?конвертировать базовый crawler4j в фокусный искатель

ответ

1

К сожалению, у вас есть невозможное ограничение, стандартное для сканеров. Вы должны загрузить страницу, чтобы определить, содержит ли она ключевые слова, которые вы ищете. Как и большинство искателей, crawler4j может работать только с данными, которые они загружали, для страниц, которые он не сканировал, но он знает только о своей строке URL, что может, но чаще всего не содержать некоторых ключевых слов.

public boolean shouldVisit(WebURL url) 

действительно единственное официальное место (т.е. без изменения исходной библиотеки), где вы можете принять это решение, и вы должны строить его по URL.

Однако, если по каким-либо причинам вы должны знать о ключевых словах перед загрузкой страницы, вы можете рассмотреть возможность использования стороннего веб-сервиса API, такого как Bing, который индексирует общедоступные веб-страницы и пытается выяснить, содержат ли в результатах поиска для этой страницы ключевые слова. ищут - но это будет работать только на публичных сайтах, к которым могут получить доступ такие сервисы, как Bing. Вам также нужно взвесить плюсы и минусы для запроса Bing или просто загрузки страницы самостоятельно, в которой большинство случаев, загружающих ее, вероятно, имеет больше смысла.

Последняя мысль на случай, если вы неправильно прочитали. Если вы хотите больше не загружать ссылки/страницы на основе только что загруженной вами страницы (например, не переходите на другие ссылки на странице X, потому что страница X не содержит правильных ключевых слов, поэтому ссылки на этих страницах считаются плохими). Если это так, вы должны получить доступ к родительскому URL из некоторых центрального хранилища данных как базы данных и проверьте, чтобы увидеть, если вы должны посетить его в:

public boolean shouldVisit(WebURL url) 

условие, что вы добавили указанную информацию в центральный датасторе в:

public void visit(Page page) 

способ. Независимо от того, должен ли willVisit окончательный метод, определяющий, должен ли искатель искать выборку контента. По умолчанию все, что вам нужно - это предоставленная там информация о URL-адресе или все, что вы пытаетесь использовать, например, ваше собственное заполненное хранилище данных или сторонний API. Последнее предупреждение состоит в том, что если вы используете централизованное хранилище данных или сторонний API, crawler4j является многопоточным, поэтому вы должны учитывать это при доступе к чему-либо из метода toVisit.

+0

Thanks Jordan! Я оставил без опции, но чтобы загрузить веб-страницу, я подумал, что если есть какой-либо разрыв между поисковым роботом, он имеет входную веб-страницу и загружает ее. Как и в случае, если поток может сканировать веб-страницу и загружать только страницу, если она соответствует моим требованиям (цель состоит в том, чтобы сэкономить место на моей локальной машине) –