add readme

This commit is contained in:
swaits committed 2015-02-20 05:50:13 -08:00
1 parent 54b804cf18
commit 530c87845e
1 file changed
+38
+38
View File
@@ -0,0 +1,38 @@
# DoCrawler #
This is a toy web crawler written in Go.
It crawls a single host (i.e. anything.com) and outputs a site map in JSON format.
For each page crawled, it distinguishes between links to other pages, links to assets, broken links, and remote links (i.e. someotherhost.com).
## Design ##
* The main crawler loop is in `docrawler.go:docrawl()`.
* From there I maintain a hash of links we've already crawled.
* Each link gets an `httpItem{}` struct instanced, which holds its crawl state.
* A number of crawler goroutines are fired off in the beginning so that we can control precisely how many http fetches happen at a single time. This number is configurable from via command line parameter.
* These goroutines listen for `*httpItem{}` on one channel, crawl it, fill out its results, and send it back to `docrawl()` on another channel.
* `docrawl()` is predominantly a for-select loop, selecting on a ticker (which is used to update status to the console and check for crawl completion), and on the "work finished" channel that the crawlers send data back on.
## How do I get set up? ##
After cloning this repository, run:
make vendor && make
In order to run the tests:
make test
If you'd like to automatically run tests any time a file is changed:
make autotest
To deploy, just copy the executable `bin/docrawler` to a destination of your choosing.
*Developed on OS X. Also tested on Windows 7 under MinGW+bash.*
## Who do I talk to? ##
Written by Stephen Waits. Please contact me at <mailto:steve@waits.net> with any questions.