Console.WriteLine('Последняя модификация: ' + resp.LastModified);
resp.Close ();
}
}
Практический пример создания программы MiniCrawler
Программе MiniCrawler присущ ряд ограничений. Во-первых, в ней обнаруживаются только абсолютные ссылки, указываемые по гипертекстовой команде href='http. Относительные ссылки при этом не обнаруживаются. Во-вторых, возврат к предыдущей ссылке в программе не предусматривается. И в-третьих, в ней отображаются только ссылки, но не окружающее их содержимое. Несмотря на все указанные ограничения данного скелетного варианта поискового робота, он вполне работоспособен и может быть без особых хлопот усовершенствован для решения других задач. На самом деле добавление новых возможностей в программу MiniCrawler — это удобный случай освоить на практике сетевые классы и узнать больше о сетевом подключении к Интернету. Ниже приведен полностью исходный код программы MiniCrawler.
/* MiniCrawler: скелетный вариант поискового робота.
Применение: для запуска поискового робота укажите URI в командной строке. Например, для того чтобы начать поиск с адреса www.McGraw-Hill.com, введите следующую команду:
MiniCrawler http://McGraw-Hill.com
*/
using System; using System.Net; using System.10;
class MiniCrawler {
// Найти ссылку в строке содержимого, static string FindLink(string htmlstr,
ref int startloc) {
int i;
int start, end; string uri = null;
i = htmlstr.IndexOf('href='http', startloc,
StringComparison.OrdinallgnoreCase);
if(i != -1) {
start = htmlstr. IndexOf (1111, i) + 1; end = htmlstr. IndexOf (1111, start); uri = htmlstr.Substring(start, end-start); startloc = end;
}
return uri;
}
static void Main(string[] args) { string link = null; string str; string answer;
int curloc; // содержит текущее положение в ответе if(args.Length != 1) {
Console.WriteLine ('Применение: MiniCrawler <uri>'); return ;
}
string uristr = args[0]; // содержит текущий URI HttpWebResponse resp = null; try { do {
Console .WriteLine ('Переход по ссылке 11 + uristr);
// Создать объект запроса типа WebRequest по указанному URI. HttpWebRequest req = (HttpWebRequest)
WebRequest.Create(uristr);
uristr = null; // запретить дальнейшее использование этого URI
// Отправить сформированный запрос и получить на него ответ, resp = (HttpWebResponse) req.GetResponse();
Stream istrm = resp.GetResponseStream () ;
// Заключить поток ввода в оболочку класса StreamReader. StreamReader rdr = new StreamReader(istrm) ;