Click here to Skip to main content
15,885,546 members
Articles / Web Development / ASP.NET

A Web Spider Library in C#

Rate me:
Please Sign up or sign in to vote.
4.28/5 (40 votes)
18 Sep 2007CPOL2 min read 264.7K   15.4K   170   36
An article about a spider library to grab websites and store them locally

Sample Image - ZetaWebSpider.png

Don't fear, it's just a web spider ;-)

Introduction

Today, while looking through some older code, I came across a set of classes I wrote at the beginning of this year for a customer project.

The classes implement a basic web spider (also called "web robot" or "web crawler") to grab web pages (including resources like images and CSS), download them locally and adjust any resource hyperlinks to point to the locally downloaded resources.

While this article is not a full-featured article with detailed explanations as I usually like to write, I still want to put the code online with this short article. Maybe some reader can still take some ideas from this code and use it as a starting point for his own project.

Overview

The classes allow for synchronous as well as asynchronous download of the web pages, allowing multiple options to be specified like hyperlink-depth to follow and proxy settings.

The downloaded resources get their own new file names, based on the hash code of the original URL. I did this for simplifications (for me as the programmer).

To parse a document, I am using the SGMLReader DLL from the GotDotNet website.

Also, since I didn't need it for the project I wrote, the library does not care about "robots.txt" or throttling or other features.

Using the Code

The download for this article contains the library ("WebSpider") and a testing console application ("WebSpiderTest"). The testing application is rather short and should be rather easy to understand.

Basically, you do create an instance of the WebSiteDownloaderOptions class, configure several parameters, create an instance of the WebSiteDownloader class, optionally connect event handlers and then tell the instance to either start synchronously or asynchronously processing the given URL.

History

  • 2007-09-17: Fixed several issues
  • 2006-09-10: Initial release of the article

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer Zeta Software GmbH
Germany Germany
Uwe does programming since 1989 with experiences in Assembler, C++, MFC and lots of web- and database stuff and now uses ASP.NET and C# extensively, too. He has also teached programming to students at the local university.

➡️ Give me a tip 🙂

In his free time, he does climbing, running and mountain biking. In 2012 he became a father of a cute boy and in 2014 of an awesome girl.

Some cool, free software from us:

Windows 10 Ereignisanzeige  
German Developer Community  
Free Test Management Software - Intuitive, competitive, Test Plans.  
Homepage erstellen - Intuitive, very easy to use.  
Offline-Homepage-Baukasten

Comments and Discussions

 
Generalso good Pin
okzhuce28-Apr-08 20:18
okzhuce28-Apr-08 20:18 
GeneralRe: so good Pin
Uwe Keim28-Apr-08 20:43
sitebuilderUwe Keim28-Apr-08 20:43 
Generalhello Pin
Member 451146418-Feb-08 14:48
Member 451146418-Feb-08 14:48 
QuestionVery nice PinPopular
aaron_myers18-Sep-07 4:59
aaron_myers18-Sep-07 4:59 
AnswerRe: Very nice Pin
Uwe Keim18-Sep-07 20:37
sitebuilderUwe Keim18-Sep-07 20:37 
GeneralRe: Very nice Pin
aaron_myers22-Oct-07 3:53
aaron_myers22-Oct-07 3:53 
QuestionRe: Very nice Pin
BugMeNot ACCOUNT24-Feb-08 16:57
BugMeNot ACCOUNT24-Feb-08 16:57 
GeneralGreat App Pin
rdissell1-Aug-07 5:14
rdissell1-Aug-07 5:14 
GeneralGreat job. But i met a problem Pin
Blue(Shanghai)14-Sep-06 21:28
Blue(Shanghai)14-Sep-06 21:28 
GeneralYour Project No Worky Pin
easy_coder12-Sep-06 3:04
easy_coder12-Sep-06 3:04 
GeneralRe: Your Project No Worky Pin
Uwe Keim12-Sep-06 3:19
sitebuilderUwe Keim12-Sep-06 3:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.