使用HtmlAgilityPack解析html

需要先在项目中引用HtmlAgilityPack.dll


解析html时,最常见的场景是在列表页抓取到列表内容,然后做循环根据列表中标题的超链接抓取详情内容。


要抓取的目标网页核心html内容:

<div class="list">

    <ul>

        <li><a href="/detail.aspx?id=48">新闻标题1</a><span>2017-1-11</span></li>

        <li><a href="/detail.aspx?id=47">新闻标题2</a><span>2017-1-10</span></li>

    </ul>

</div>


C#代码:

string content = GetUrlHtml("http://xxxx.com/newslist.aspx", "gb2312"); //获取目标网页的html

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
HtmlNode contentNode = doc.DocumentNode.SelectSingleNode("//div[@class='list' ]/ul"); //列表内容所在的大区域
HtmlNodeCollection list = contentNode.SelectNodes("li"); //生成循环
foreach(HtmlAgilityPack.HtmlNode item in list)
{
    var a = item.SelectSingleNode("a");
    var txt = a.InnerText; //标题
    var href = a.Attributes["href"].Value; //详情地址
    var dt = item.SelectSingleNode("span").InnerText; //时间
    var detail = GetUrlHtml(href, "gb2312"); //获得详情页html,再进行解析获得最终内容

    //插入数据库
}


private string GetUrlHtml(string url, string code = "utf-8")
{
    try
    {
        WebRequest rGet = WebRequest.Create(url);
        WebResponse rSet = rGet.GetResponse();
        Stream s = rSet.GetResponseStream();
        StreamReader reader = new StreamReader(s, Encoding.GetEncoding(code));
        return reader.ReadToEnd();
    }
    catch (WebException)
    {
        //连接失败
        return "";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值