powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / web crawler on pure Java?
13 сообщений из 13, страница 1 из 1
web crawler on pure Java?
    #38661557
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, нужно написать тестовое задание, а я что-то в примерах встречаю только работу с библиотеками-парсерами.

Подскажите из чего начать, где почитать, как это вообще делать с помощью только того что предлагает jdk?
Краткая суть - нужно полезть на веб страничку и оттуда достать все url, потому взять эти url и опять полезть в них и так пока не наберется первая 1000 урлов.

Спасибо.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38661575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсить, скорее всего, удобно через State Machine
Вот тут толково описано
http://wickedsource.org/2013/11/19/state-machine-with-java/
А вот пример гуглиться с пол пинка.
https://www.google.com/search?q=HTMLLinkExtractor.java
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38661577
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

1. Гуглишь regexp на предмет url (можешь с добавкой href=) и как из java считать страничку.
2. Придумываешь мапу в которой по нормализованному url сохраняется ее текст. И очередь страничек на анализ.
3. Считываешь первую страничку. Вытаскиваешь ссылки.
4. Нормализуешь их (большие-маленькие прибавка от первоначальной страницы)
5. Если в мапе пусто - загружаешь страничку по url, записываешь в мапу и ставишь в очередь на анализ.
6. goto 2
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38661665
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, почитаю и попробую.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38661699
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Здравствуйте, нужно написать тестовое задание, а я что-то в примерах встречаю только работу с библиотеками-парсерами.

Подскажите из чего начать, где почитать, как это вообще делать с помощью только того что предлагает jdk?
Краткая суть - нужно полезть на веб страничку и оттуда достать все url, потому взять эти url и опять полезть в них и так пока не наберется первая 1000 урлов.

Спасибо.
По поводу 1000 урлов.

Тут регулировка нужна. Например делать больше "поиск в ширину" чем в глубину. И фильтровать
ссылки повторы чтобы краулер повторно не бегал в те узлы где уже побывал. Плюс урлы должны
быть селективны. Например урл документа и урл того-же самого документа с printview=yes нужно
нормализовывать и игнорить. Плюс фильтровал урлы на картинки. Плюс фильтровать урлы на баннерные
сети. Да много еще чего накрутить.

Плюс эмулировать jscript по возможности.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38661994
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

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

авторPlease send us the Java source code for a crawler which
- fetches the content for a given start URL
- extracts the links from the content.
- goes on to crawl the extracted links (back to step 1)
- the crawler should stop after 1000 found URLs

Please use only stuff which is already provided by the JDK.


ну и вот, если кому будет интересно мой примитивный crawler с коленки.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
package de.visualmeta;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Possible to do a lot safer and cleaner, but proceeded from the problem
 * statement. And it is not very concretized in some moments.
 * 
 * @author JDev
 *
 */
public class Crawler {

	private final String LINK_PATTERN= "\\(?\\b(http://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
	private Pattern linkPattern = Pattern.compile(LINK_PATTERN, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

	private final String START_URL = "http://google.com/";

	private int linksArrayCounter = 0;

	private ArrayList<String> links = new ArrayList<String>();
	private int step = 0;

	public Crawler() {

		// I understand that there is a possible recursion.
		while (true) {
			if (links.isEmpty()) {
				parseLinksFromHtml(START_URL);
			} else if (linksArrayCounter < links.size()) {
				parseLinksFromHtml(links.get(linksArrayCounter));
				linksArrayCounter++;
			} else {
				linksArrayCounter = 0;
			}
			step++;
		}
	}

	private void parseLinksFromHtml(String stringUrl) {

		URL url;
		InputStream inputStream = null;
		BufferedReader bReader;
		String line;

		StringBuilder stringBuilder = new StringBuilder();

		try {
			url = new URL(stringUrl);
			inputStream = url.openStream();
			bReader = new BufferedReader(new InputStreamReader(inputStream));

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

			Matcher pageMatcher = linkPattern.matcher(stringBuilder.toString());

			while (pageMatcher.find()) {
				links.add(pageMatcher.group());
				if (links.size() >= 1000) {
					for (int i = 0; i < links.size(); i++) {
						System.out.println(i + 1 + "> " + links.get(i));
					}
					System.out.println("\n -------------------------------------\n Parsed 1000 links in " + step
							+ " steps \n -------------------------------------\n");
					System.exit(0);
				}
			}
		} catch (MalformedURLException muException) {
			muException.printStackTrace();
			linksArrayCounter++;
		} catch (IOException ioException) {
			ioException.printStackTrace();
		} finally {
			try {
				if (inputStream != null) {
					inputStream.close();
				}
			} catch (IOException ioException) {
			}
		}
	}

	public static void main(String[] args) {

		new Crawler();
	}
}
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662054
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

while (true) без break внутри - нечитаемо
тот же самый system.exit(0) и у вас finally не выполнится.
поиск/добавление ссылок и их распечатка в stoud перемешаны
regexp какой-то слишком, можно было бы самому написать, и для 90% случаев подошел бы.
я не нашел проверки на однаковые ссылки при добавлении (вместо списка сделать множество как вариант)
вместо списка возможно было бы сделать более лаконично через очередь.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662071
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892_webdev_,

while (true) без break внутри - нечитаемо
тот же самый system.exit(0) и у вас finally не выполнится.
поиск/добавление ссылок и их распечатка в stoud перемешаны
regexp какой-то слишком, можно было бы самому написать, и для 90% случаев подошел бы.
я не нашел проверки на однаковые ссылки при добавлении (вместо списка сделать множество как вариант)
вместо списка возможно было бы сделать более лаконично через очередь.

интересные замечания.

- да, и куда вы предложите его всунуть? Он по ходу никогда не сработает.
- вот это правильно подметили перенес System.exit(0); в finally.
- распечатку вынес в finally. также
- вынужден согласиться, сейчас некогда самому кумекать, да и пишу я их редко, так что пришлось бы посидеть немножко.
- Множество? Не сориентируете на нужную структуру данных? HashSet, TreeSet? Где-то читал о разнице, но уже и не вспомню.
- вы имеете в виду queue? Чем же она лаконичней?

Спасибо.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
regexp какой-то странный. Зачем там "www." непонятно.
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662194
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonregexp какой-то странный. Зачем там "www." непонятно. - написал выше, чтоб сейас колдовать regexp нету времени, нашел на просторах такой. ))))
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662272
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у Шилдта целая глава посвящена веб-краулеру http://www.jamesholmes.com/TheArtOfJava/ Там можно скачать как текст так и исходники
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662286
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
web crawler on pure Java?
    #38662330
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл нику Шилдта целая глава посвящена веб-краулеру http://www.jamesholmes.com/TheArtOfJava/ Там можно скачать как текст так и исходники
fixxer Пример из книги Algorithms of the Intelligent Web (есть перевод ) - спасибо большое, но это небольшое тестовое задание, которое мне нужно отправить на фирму, и не думаю, что это будет хороший ход, скопировать или хотя бы частично скопировать из книги. Что придумал, то придумал.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / web crawler on pure Java?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]