您的位置:首页 > Web前端 > HTML

使用HtmlAgilityPack解析html

2017-12-14 21:37 465 查看
需要先在项目中引用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 "";
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: