existing.txt
. V každém iteračním kroku se k tomuto seznamu sloučí nové příchozí URL, označme například incoming.txt
. Všechna stažená data skončí ve výstupním souboru (označme stream.data
). Při slučování seznamů incoming.txt
a existing.txt
se postupuje takto: existing.txt
, pak se stahuje jen tehdy, pokud se ho dosud nepodařilo stáhnout bez chyby
incoming.txt
, pak se bude určitě činit pokus o jeho stažení
incoming.txt
.
stream.data
se odrotuje, abychom zbytečně neparsovali již zpracované HTML dokumenty.
Celý crawler lze modulárně postavit z několika málo programů. Pomocí vhodných skriptů můžeme dostat implementaci pro jednouzlovou nebo distribuovanou instalaci, a mezi těmito instalacemi lze snadno přecházet. Nejhorší složitost dílčího kroku je O(n.log(n)), přičemž kroky pracující s největšími datovými objemy běží se složitostí O(n).
Jednouzlovou instalaci získáme nasazením skriptu:
./run.sh robot.Process -i incoming.txt -e existing.txt -o stream.data ./run.sh robot.HtmlParser -i stream.data -m -a | sort -t ' ' -k 2 -u >incoming.txt gzip stream.data mv stream.data.gz stream-`date +"%Y-%m-%d-%H-%M"`.gz mv existing.txt-new existing.txtSeznam
incoming.txt
obsahuje seznam URL v textovém formátu, kde každý řádek obsahuje jedno (úplné a normalizované) URL. Na začátku by měl být naplněn seznamem výchozích URL.
Naproti tomu existing.txt
využívá zhuštěný zápis setříděného seznamu řetězců (textové reprezentace zápisu URL), kdy se nejprve zapisuje počet znaků shodných s předchozím řetězcem v seznamu a potom zbytek řetězce, počínaje za posledním shodným znakem. Konkrétně se tedy seznam {aaaa, aaba, abba, ace, acer} zapisuje jako: