在这个信息爆炸的时代,经常需要从互联网的海量信息中寻找特定的资源。本文介绍的应用程序就是一个能够帮助用户根据特定关键词收集网页URL的工具。用户可以通过简单的界面输入关键词,程序会自动搜索并列出相关的网页链接。
这个应用程序是基于Microsoft的WebMatrix开发的,使用了Razor语法。它是一个单页面应用程序(SPA),用户界面和处理逻辑都集成在一个Razor视图页面中。通过这种方式,开发者可以更加方便地编写和维护代码。
程序的主要功能是通过用户输入的关键词,自动从互联网上搜索并收集相关的网页URL。例如,如果用户输入“英语学习播客MP3”,程序就会找到许多提供英语学习播客MP3下载的网页链接。
程序的核心是一个名为“Grabber”的类,它负责执行网络爬虫的功能。这个类使用.NET的WebRequest类来获取网页内容,并使用WebGrid类来展示搜索结果。程序的运行过程大致如下:
Grabber grabber = new Grabber();
grabber.Search(searchWords, MaxRecords, urlTable);
这段代码创建了一个“Grabber”对象,并调用其Search方法来执行搜索。Search方法接受三个参数:搜索关键词、最大记录数和URL集合。它会根据这些参数从互联网上搜索并收集URL,直到达到用户设定的最大记录数或者所有URL都被访问过。
程序还使用了WebGrid类来展示搜索结果。WebGrid是一个灵活的数据展示组件,可以将数据以表格的形式展示在网页上。通过以下代码,程序将URL集合设置为WebGrid的数据源,并在网页上渲染表格:
grid = new WebGrid(source:urlTable, rowsPerPage:100);
grid.SortDirection = SortDirection.Descending;
grid.SortColumn = "Count";
这段代码创建了一个WebGrid对象,并将URL集合作为其数据源。同时,它还设置了每页显示的行数、排序方向和排序列。这样,用户就可以方便地查看和排序搜索结果了。
为了在页面刷新时保留URL集合,程序将其保存在了Session对象中。这是因为Session对象可以跨页面请求持久化数据。此外,为了避免重复的URL,程序使用了HashSet集合来存储URL。HashSet是一个不允许重复元素的集合,它需要重写GetHashCode和Equals方法来确保元素的唯一性。
程序的搜索过程大约每10秒执行一次,直到达到最大记录数或者所有URL都被访问过。这个过程可以通过以下代码来控制:
if ((DateTime.Now - t1).TotalSeconds > MaxServerTime)
break;
这段代码通过计算当前时间和搜索开始时间的差值,来控制搜索的持续时间。如果超过用户设定的最大服务器时间,搜索过程就会停止。