Эффективный дизайн crawler4J для получения данных - PullRequest
2 голосов
/ 25 февраля 2012

Я пытаюсь получить данные с различных веб-сайтов. После поиска в переполнении стека я использую crawler4j, как многие предлагали. Ниже мое понимание / дизайн:

 1. Get sitemap.xml from robots.txt.
 2. If sitemap.xml is not available in robots.txt, look for sitemap.xml directly.  
 3. Now, get the list of all URL's from sitemap.xml 
 4. Now, fetch the content for all above URL's
 5. If sitemap.xml is also not available, then scan entire website.

Теперь, пожалуйста, дайте мне знать, способен ли crawler4J выполнить шаги 1, 2 и 3 ??? Пожалуйста, предложите любой более хороший дизайн доступен (при условии, что каналы не доступны) Если да, то можете ли вы указать мне, как это сделать?

Спасибо Venkat

Ответы [ 2 ]

3 голосов
/ 14 февраля 2013

Crawler4J не может выполнять шаги 1, 2 и 3, однако он достаточно хорошо работает для шагов 4 и 5. Мой совет - использовать HTTP-клиент Java, например, из Http Components чтобы получить карту сайта.Разобрать XML, используя любой синтаксический анализатор Java XML, и добавить URL-адреса в коллекцию.Затем заполните ваши семена crawler4j списком:

for(String url : sitemapsUrl){
 controller.addSeed(url);
}
controller.start(YourCrawler, nbthreads);
1 голос
/ 26 февраля 2012

Я никогда не использовал crawler4j, поэтому примите моё мнение с недоверием: я думаю, что это может сделать сканер, но похоже, что вам нужно изменить какой-то код.В частности, вы можете взглянуть на RobotstxtParser.java и HostDirectives.java.Вам придется изменить синтаксический анализатор, чтобы извлечь карту сайта и создать новое поле в директивах, чтобы вернуть sitemap.xml.Шаг 3 может быть выполнен в сборщике, если из sitemap.txt не было возвращено никаких директив.

Однако я не совсем уверен, что вы получите, проверив sitemap.txt: это бесполезноделать, если вы не ищете что-то конкретное.

...