Sample code for 30+ languages & platforms
Unicode C++

A Simple Web Crawler

See more Spider Examples

This demonstrates a very simple web crawler using the Chilkat Spider component.

Chilkat Unicode C++ Downloads

Unicode C++
#include <CkSpiderW.h>
#include <CkStringArrayW.h>

void ChilkatSample(void)
    {
    bool success = false;

    CkSpiderW spider;

    CkStringArrayW seenDomains;
    CkStringArrayW seedUrls;

    seenDomains.put_Unique(true);
    seedUrls.put_Unique(true);

    // You will need to change the start URL to something else...
    seedUrls.Append(L"http://something.whateverYouWant.com/");

    // Set outbound URL exclude patterns
    // URLs matching any of these patterns will not be added to the 
    // collection of outbound links.
    spider.AddAvoidOutboundLinkPattern(L"*?id=*");
    spider.AddAvoidOutboundLinkPattern(L"*.mypages.*");
    spider.AddAvoidOutboundLinkPattern(L"*.personal.*");
    spider.AddAvoidOutboundLinkPattern(L"*.comcast.*");
    spider.AddAvoidOutboundLinkPattern(L"*.aol.*");
    spider.AddAvoidOutboundLinkPattern(L"*~*");

    // Use a cache so we don't have to re-fetch URLs previously fetched.
    spider.put_CacheDir(L"c:/spiderCache/");
    spider.put_FetchFromCache(true);
    spider.put_UpdateCache(true);

    while (seedUrls.get_Count() > 0) {

        const wchar_t *url = seedUrls.pop();
        spider.Initialize(url);

        // Spider 5 URLs of this domain.
        // but first, save the base domain in seenDomains
        const wchar_t *domain = spider.getUrlDomain(url);
        seenDomains.Append(spider.getBaseDomain(domain));

        int i;

        for (i = 0; i <= 4; i++) {
            success = spider.CrawlNext();
            if (success == true) {

                // Display the URL we just crawled.
                wprintf(L"%s\n",spider.lastUrl());

                // If the last URL was retrieved from cache,
                // we won't wait.  Otherwise we'll wait 1 second
                // before fetching the next URL.
                if (spider.get_LastFromCache() != true) {
                    spider.SleepMs(1000);
                }

            }
            else {
                // cause the loop to exit..
                i = 999;
            }

        }

        // Add the outbound links to seedUrls, except
        // for the domains we've already seen.
        for (i = 0; i <= spider.get_NumOutboundLinks() - 1; i++) {

            url = spider.getOutboundLink(i);
            const wchar_t *domain = spider.getUrlDomain(url);
            const wchar_t *baseDomain = spider.getBaseDomain(domain);
            if (seenDomains.Contains(baseDomain) == false) {
                // Don't let our list of seedUrls grow too large.
                if (seedUrls.get_Count() < 1000) {
                    seedUrls.Append(url);
                }

            }

        }

    }
    }