服务器之家

服务器之家 > 正文

使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码

时间:2019-09-24 10:38     来源/作者:asp.net教程网

使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码

使用HtmlAgilityPack XPath 表达式抓取博客园数据的实现代码

Web 前端代码

复制代码代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<table cellpadding="1" cellspacing="1" bgcolor="#f1f1f1" style="text-align: center"> 
<asp:Repeater ID="Repeater1" runat="server"> 
<HeaderTemplate> 
<tr> 
<td> 
标题 
</td> 
<td> 
发布作者 
</td> 
<td> 
发布时间 
</td> 
</tr> 
</HeaderTemplate> 
<ItemTemplate> 
<tr bgcolor="#ffffff"> 
<td align="left"> 
<a href='<%#Eval("url") %>' target="_blank"> 
<%#Eval("title") %> 
</a> 
</td> 
<td> 
<a href='<%#Eval("authorUrl") %>' target="_blank"> 
<%#Eval("author") %> 
</a> 
</td> 
<td> 
<%#Eval("updatetime") %> 
</td> 
</tr> 
</ItemTemplate> 
</asp:Repeater> 
</table> 
</div> 
</form> 
</body> 
</html> 


cs 后台代码: 

复制代码代码如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using S1; 
using System.Net; 
using System.IO; 
using System.Text; 
using HtmlAgilityPack; 
public partial class _Default : System.Web.UI.Page 

protected void Page_Load(object sender, EventArgs e) 

string page = string.Empty; 
if (!IsPostBack) 

WebClient wc = new WebClient(); 
string address = "http://www.cnblogs.com"; 
if (!string.IsNullOrEmpty(Request.QueryString["p"])) 

address += "/" + Request.QueryString["p"];//分页,p=p2,p=p3 

Stream stream = wc.OpenRead(address); 
StreamReader sr = new StreamReader(stream, Encoding.UTF8); 
string html = sr.ReadToEnd(); 
//实例化HtmlAgilityPack.HtmlDocument对象 
HtmlDocument doc = new HtmlDocument(); 
//载入HTML 
doc.LoadHtml(html); 
//根据HTML节点NODE的ID获取节点 
HtmlNode navNode = doc.GetElementbyId("post_list"); 
//div[2]表示文章链接a位于post_list里面第3个div节点中 
HtmlNodeCollection list = navNode.SelectNodes("//div[2]/h3/a"); //根据XPATH来索引节点 
Cnblogs cnblogs = null; 
IList<Cnblogs> cnlist = new List<Cnblogs>(); 
foreach (HtmlNode node in list) 

cnblogs = new Cnblogs(); 
//获取文章链接地址 
cnblogs.url = node.Attributes["href"].Value.ToString(); 
//获取文章标题 
cnblogs.title = node.InnerText; 
cnlist.Add(cnblogs); 

HtmlNodeCollection list1 = navNode.SelectNodes("//div[2]/div/a"); 
for (int i = 0; i < cnlist.Count; i++) 

cnlist[i].author = list1[i].InnerText; 
cnlist[i].authorUrl = list1[i].Attributes["href"].Value.ToString(); 
cnlist[i].updatetime = list1[i].NextSibling.InnerText.Replace("发布于", "").Trim(); 

this.Repeater1.DataSource = cnlist; 
this.Repeater1.DataBind(); 


public class Cnblogs 

public string title { get; set; } 
public string url { get; set; } 
public string author { get; set; } 
public string authorUrl { get; set; } 
public string updatetime { get; set; } 

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部

337
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40