Unicode C++
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
#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);
}
}
}
}
}