的。比如:查找杭电ACM系统中题号为1000的答案文本所在网址链接,则百度搜索引擎需要输入关键字“hdu 1000”,键入回车,此时URL为“http://www.http://china-audit.com//s?wd=hdu+1000&tn=92068069_pg&rsv_enter=1&rsv_sug3=8&rsv_sug=0&rsv_sug1=6&rsv_sug4=412&inputT=3610”。对于这样的URL显然是不利于程序实现搜索的,我们只需要明白其中的几个关键参数即可,这样也能够有效的缩短URL的长度,更好的分析URL与关键字的关系。上述的URL中,wd参数表示查询的关键词,若关键词为简体中文,后续参数中也会有一个ie参数,表示关键词的编码,即ie=gb2312。此外,还有两个URL参数需要注意,pn参数和cl,pn表示显示结果的页数,cl参数=3为网页搜索。其余参数均为可选参数,并不是很必要存在URL当中。因此,在分析了百度搜索参数之后,百度
搜
索
关键词
不
变
,此时
搜
索
的
URL
则
为
“http://www.http://china-audit.com//s?word=hdu 1000”,由此可见,在没有其他参数的情况下,依然能够搜索出答案文本链接所在网页,表明百度搜索的URL缩短是有效的。此时的URL结构可以解析为:“http://www.http://china-audit.com//s?word=hdu ”+“题号”。在此基础上,利用网络蜘蛛技术,答案文本所在链接的自动搜索的实现也是确实可行的。本系统实现的具体代码如下:
private static void operator0(object obj)
{
try {
show += \
System.Net.WebClient client = new WebClient();
Streamstrm=client.OpenRead(\
word=hdu \
StreamReader sr = new StreamReader(strm); string line; int num = 1; int find1 = -1;
while ((line = sr.ReadLine()) != null) {
find1 = line.IndexOf(\ if (find1 != -1) break; }
if (find1 != -1) {
for (int i = 0; i < 10; i++)
17
{
int find2 = -1; do {
find2 = line.Substring(find1).IndexOf(\
result c-container \
if (find2 != -1) break; find1 = 0;
} while ((line = sr.ReadLine()) != null); if (find2 == -1) break; int find3 = -1; do {
find3 = line.Substring(find1 + find2).IndexOf(\ if (find3 != -1) break; find1 = find2 = 0;
} while ((line = sr.ReadLine()) != null); if (find3 == -1) break; int find4 = -1; string temp = \ do {
find4 = line.Substring(find1 + find2 + find3
+ 8).IndexOf(\
if (find4 != -1) break;
temp += line.Substring(find1 + find2 + find3 + 8);
find1 = find2 = find3 = 0;
} while ((line = sr.ReadLine()) != null); if (find4 == -1) break;
temp += line.Substring(find1 + find2 + find3
+ 8, find4);
link[i] = temp; num++; } }
strm.Close(); OK = true; }
catch (Exception e) {
input_state = 3; search_state = 2;
18
AC_state = 2; } }
实现的百度搜索效果图如下:
图3-3百度搜索效果图
19
4答案文本的预处理
4.1网页文本过滤器
网页文本的内容主要由网页文件、文档文件、图片文件、多媒体文件等组成。当网络蜘蛛被构建时,网页当中的图像和多媒体信息就已经被过滤掉了,此时的网页文本内容主要由HTML标记、文档文件和脚本组成。还是以杭电ACM题号为1000的题目为例,经百度搜索以后,会出图3-1的界面。通过网络蜘蛛技术,获取到图3-1界面的第一个URL链接,即题号为1000的答案文本所在的网页的链接。分析答案文本所在网页的源代码是提取答案文本的前提。下面是该网页的源代码截图:
图4-1网页源代码
显然文本信息中的脚本标记、
...等HTML标记对于答案文本的提取来讲并无价值。有价值的信息仅限于
...标记里面的部分信息。但是这里面的信息预处理并不包括特殊符号,因此需要在网络蜘蛛获取网页文本的时候将这部分信息提取出来,实现其转换成可编译代码的功能交由下一个模块完成即可。系统实现的具体代码如下:
private static void op_getCode1(object obj) {
20

