An experiment into crawling and parsing as described at http://goo.gl/3MW3x
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install crawlbuddy
To Be Determined
The Web contains servers that create spider traps, which are generators of web pages that mislead crawlers into getting stuck fetching an infinite number of pages in a particular domain. Crawlers must be designed to be resilient to such traps. Not all such traps are malicious; some are the inadvertent side-effect of faulty website development.
Web servers have both implicit and explicit policies regulating the rate at which a crawler can visit them. These politeness policies must be respected.
The crawler should have the ability to execute in a distributed fashion across multiple machines.
The crawler architecture should permit scaling up the crawl rate by adding extra machines and bandwidth.
Performance and efficiency:
The crawl system should make efficient use of various system resources including processor, storage and network bandwidth.
Given that a significant fraction of all web pages are of poor utility for serving user query needs, the crawler should be biased towards fetching ``useful'' pages first.
In many applications, the crawler should operate in continuous mode: it should obtain fresh copies of previously fetched pages. A search engine crawler, for instance, can thus ensure that the search engine's index contains a fairly current representation of each indexed web page. For such continuous crawling, a crawler should be able to crawl a page with a frequency that approximates the rate of change of that page.
Crawlers should be designed to be extensible in many ways - to cope with new data formats, new fetch protocols, and so on. This demands that the crawler architecture be modular.
- Only one connection should be open to any given host at a time.
- A waiting time of a few seconds should occur between successive requests to a host.
- Politeness restrictions detailed in Section 20.2.1 should be obeyed.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request