using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
string patternForUnits1 = @"class=""units-row-link";
string patternForUnits2 = @"href=[""\']?([^""\'>]+)[""\']?""";
string patternForUnits3 = @"\/Small\/(([^""\'>]+)[""\']?.png)""";
var states = getStates();
foreach(String stateUri in states) {
Dictionary<string, List<string>> cities = new Dictionary<string, List<string>>();
cities.Add(stateUri, getBasicScrapedItems(stateUri));
public static List<string> getStates()
var statesUri = new List<string>();
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/alberta");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/british-columbia");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/manitoba");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/new-brunswick");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/newfoundland-and-labrador");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/nova-scotia");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/ontario");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/quebec");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/saskatchewan");
statesUri.Add("http://www.buzzbuzzhome.com/cities/canada/yukon-territory");
public static List<string> getBasicScrapedItems(String strRequest)
string patternForCities = @"class=""cities-city"" href=[""\']?(\/city\/([^""\'>]+)[""\']?"")";
WebRequest request = WebRequest.Create (strRequest);
WebResponse response = request.GetResponse ();
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
Stream dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd();
var scrapedItems = new List<string>();
foreach (Match match in Regex.Matches(responseFromServer, patternForCities, RegexOptions.IgnoreCase)) {
scrapedItems.Add(match.Groups[1].Value);
foreach (String item in scrapedItems) {
Console.WriteLine("{0}", item);
public static List<string> getMultipleStepScrapedItems(String strRequest, List<String> strPatterns)
string patternForCities = @"class=""cities-city"" href=[""\']?(\/city\/([^""\'>]+)[""\']?"")";
var scrapedItems = new List<string>();
WebRequest request = WebRequest.Create (strRequest);
WebResponse response = request.GetResponse ();
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
Stream dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd();
foreach(String pattern in strPatterns) {
foreach (Match matchFirstRound in Regex.Matches(responseFromServer, patternForCities, RegexOptions.IgnoreCase)) {
responseFromServer = responseFromServer.Substring(matchFirstRound.Index);
foreach (Match matchSecondRound in Regex.Matches(responseFromServer, patternForCities, RegexOptions.IgnoreCase)) {
scrapedItems.Add(matchSecondRound.Groups[1].Value);
foreach (String item in scrapedItems) {
Console.WriteLine("{0}", item);