在上一文章中的“文章信息操作类(Articles)”添加如下方法来读取文章内容,博客园文章内容都是包含在同一个div中,所以如下:
/// <summary>
/// 采集博客园asp.net文章内容实例(下)
/// </summary>
/// <returns>读取文章后返回文章内容字符串</returns>
public static string GetArtContent(string artUrl)
{
string TextStr = "";
//网页操作对象,我用来获取网页源码
HTML html = new HTML();
//对博客园每日排行数据进行采集
string htmlcode = html.GetHTML(artUrl, "utf-8");
int strIndex = htmlcode.IndexOf("<div id=\"cnblogs_post_body\">") + ("<div id=\"cnblogs_post_body\">") .Length;
int endIndex = htmlcode.IndexOf("</div><div id=\"MySignature\"></div>");
TextStr = htmlcode.Substring(strIndex, endIndex - strIndex);
return TextStr;
}
然后在该项目中新建一个winform窗体“Form2”,在里面加两个控件:DataGridView和WebBrowser,DataGridView用来绑定所读取到的文章地址URl(隐藏)、标题和时间,WebBrowser用来显示文章内容,代码如下:
private void Form2_Load(object sender, EventArgs e)
{
//得到采集的全部文章
List<Article> list = Articles.GetArticles();
//通过循环将全部文章遍历
if (list != null)
{
DataTable db = new DataTable();
db.Columns.Add("DateTime", System.Type.GetType("System.String"));
db.Columns.Add("Title", System.Type.GetType("System.String"));
db.Columns.Add("Url", System.Type.GetType("System.String"));
foreach (Article at in list) //查找文件
{
DataRow newdr = db.NewRow();
newdr[0] = Convert.ToDateTime(at.Datatime).ToString("yyyy-MM-dd"); //转换为只显示日期
newdr[1] = at.Title.ToString();
newdr[2] = at.Url.ToString();
db.Rows.Add(newdr);
}
DgvTable.DataSource = db;
}
}
private void DgvTable_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (DgvTable.CurrentRow != null)
{
int Crows = DgvTable.CurrentRow.Index;
if (Crows >= 0)
{
string dateTime = DgvTable.Rows[Crows].Cells["DateTime"].Value.ToString();
string title = DgvTable.Rows[Crows].Cells["Title"].Value.ToString();
string url = DgvTable.Rows[Crows].Cells["Url"].Value.ToString();
//读取文章内容
string TextStr = Articles.GetArtContent(url);
webBrowser1.DocumentText = TextStr;
}
}
}
效果图:
评论列表: