通用论坛助手系列之特定网站的数据抽取
sqhua 2002-09-23 04:49:53 这里包括了下载网上数据和读取本地数据库的两个部分
using System;
using System.Xml;
using System.Data;
namespace 论坛客户端
{
/// <summary>
/// Summary description for
/// </summary>
public class 南宁时空网 : 网络论坛
{
string m_SessionID ;
string m_UserName ;
string m_PassWord ;
string 当前论坛编号 ;
string 当前贴子编号 ;
string 数据库文件名 = "南宁时空网.mdb" ;
public string SiteName = "南宁时空网";
数据保存 lda = new 数据保存() ;
public 南宁时空网()
{
//
// TODO: Add constructor logic here
//
lda.数据库文件名 = 数据库文件名 ;
}
override public string 取网站名称()
{
return SiteName ;
}
override public bool 登录( string UserName, string PassWord )
{
string url = string.Format( "http://"
+ "www.nnsky.com/bbs/chklogin.asp?UserName={0}&PassWord={1}", UserName, PassWord ) ;
m_SessionID = 数据传输.取得SessionID( url, "" ) ;
if(( m_SessionID != null ) && ( m_SessionID.Length > 5 ))
{
m_UserName = UserName ;
m_PassWord = PassWord ;
return true ;
}
return false;
}
override public void 下载论坛列表()
{
string url = string.Format( "http://" + "www.nnsky.com/bbs/index.asp" ) ;
string html = 数据传输.发送页面请求( url, "", m_SessionID ) ;
int index = 0, tmp_start, tmp_end, 论坛类别位置 = 0 ;
string 论坛类别 ;
string 论坛类别标志 = "<TD colSpan=4> " ;
string 论坛信息标志 = "<td><a href=\"list.asp?" ;
string 项目开始标志 ;
string 论坛位置 ;
string 论坛名称 ;
string 论坛版主 ;
string 论坛描述 ;
string 论坛编号 ;
while( true )
{
论坛类别位置 = html.IndexOf( 论坛类别标志, 论坛类别位置 + 1 ) ;
if( 论坛类别位置 < 0 )
break ;
tmp_start = 论坛类别位置 + 论坛类别标志.Length ;
tmp_end = html.IndexOf( "</TD>", tmp_start ) ;
论坛类别 = html.Substring( tmp_start, tmp_end - tmp_start ) ;
bool first = true ;
index = 论坛类别位置 ;
for( ;; )
{
index = html.IndexOf( 论坛信息标志, index + 1 ) ;
if( index < 0 )
break ;
if( first )
first = false ;
else
{
tmp_start = html.IndexOf( 论坛类别标志, 论坛类别位置 + 1 ) ;
if(( tmp_start > 0 ) && ( tmp_start < index ))
break ;
}
tmp_start = index + 论坛信息标志.Length ;
tmp_end = html.IndexOf( "\"" , tmp_start ) ;
论坛位置 = html.Substring( tmp_start, tmp_end - tmp_start ) ;
论坛编号 = 论坛位置.Substring( 论坛位置.IndexOf( "=" ) + 1 ) ;
tmp_start = html.IndexOf( "<font", index ) ;
项目开始标志 = "\">" ;
tmp_start = html.IndexOf( "\">", tmp_start ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "</font>", tmp_start ) ;
论坛名称 = html.Substring( tmp_start, tmp_end - tmp_start ) ;
项目开始标志 = "<br>" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "</td>", tmp_start ) ;
论坛描述 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存论坛列表( 论坛类别, 论坛编号, 论坛名称, 论坛描述 ) ;
项目开始标志 = "dispuser.asp?name=" ;
tmp_start = html.IndexOf( 项目开始标志, tmp_end ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_start = html.IndexOf( 项目开始标志, tmp_start ) ;
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
论坛版主 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.删除版主列表( 论坛编号 ) ;
lda.保存版主列表( 论坛编号, 论坛版主 ) ;
while( true )
{
tmp_start = html.IndexOf( 项目开始标志, tmp_end + 1 ) ;
if( tmp_start < 0 )
break ;
tmp_end = html.IndexOf( 论坛信息标志, tmp_end + 1 ) ;
if( tmp_end < 0 )
break ;
if( tmp_end > tmp_start )
{
tmp_start = tmp_start + 项目开始标志.Length ;
tmp_end = html.IndexOf( "'", tmp_start ) ;
论坛版主 = html.Substring( tmp_start, tmp_end - tmp_start ).Trim() ;
lda.保存版主列表( 论坛编号, 论坛版主 ) ;
}
else
break ;
}
}
}
}