zoukankan      html  css  js  c++  java
  • 爬虫技术 -- 进阶学习(九)使用HtmlAgilityPack获取页面链接(附c#代码及插件下载)

    菜鸟HtmlAgilityPack初体验。。。弱弱的代码。。。

    Html Agility Pack是一个开源项目,为网页提供了标准的DOM API和XPath导航。使用WebBrowser和HttpWebRequest下载的网页可以用Html Agility Pack来解析。

    HtmlAgilityPack的文档是CHM格式的,有时会无法正常阅读CHM格式的文件。如果是IE不能链接到您请求的网页或者打开后“页面无法显示”。请在要打开的CHM文件上右击属性,会在底下属性多了个“解除锁定”,单击后就可以正常显示了。 

    如果有需要下载,请点击HtmlAgilityPack.1.4.0下载,解压后找到HtmlAgilityPack.dll,把它添加到项目中。

    HtmlAgilityPack.dll中的类都位于HtmlAgilityPack命名空间。

    HtmlDocument表示一个完整的HTML文档。用Load方法加载网页。

    下面进行HtmlAgilityPack初体验,

    实现目标:,点击按钮后,根据给定的网址,打印出该页面的所有链接。简单代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 using HtmlAgilityPack;
    10 
    11 namespace HtmlAgilityPackDemo1
    12 {
    13     public partial class Form1 : Form
    14     {
    15         public Form1()
    16         {
    17             InitializeComponent();
    18         }
    19 
    20         private void Form1_Load(object sender, EventArgs e)
    21         {
    22 
    23         }
    24 
    25         private void button1_Click(object sender, EventArgs e)
    26         {
    27             HtmlWeb webClient = new HtmlWeb();
    28             HtmlAgilityPack.HtmlDocument doc = webClient.Load("http://www.cnblogs.com/lmei");
    29 
    30             HtmlNodeCollection hrefList = doc.DocumentNode.SelectNodes(".//a[@href]");
    31 
    32             if (hrefList != null)
    33             {
    34                 foreach (HtmlNode href in hrefList)
    35                 {
    36                     HtmlAttribute att = href.Attributes["href"];
    37                    Console.WriteLine(att.Value);
    38 
    39                 }
    40 
    41             }
    42 
    43         }
    44     }
    45 }

    当上面第28行代码写成如下,

    HtmlDocument doc = webClient.Load("http://www.cnblogs.com/lmei");

    会出现错误提示,

    于是修改如下,

    HtmlAgilityPack.HtmlDocument doc = webClient.Load("http://www.cnblogs.com/lmei");

    接下来,看下控制台的输出,截图如下:

    可见,网页上面的超链接都被打印出来了。。。

    当然,如果想要抓取的是网页上面的正文,加载后可能出现乱码问题,则可以指定文件的编码:

    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
    Encoding encoder = Encoding.GetEncoding("utf-8"); htmlDoc.Load("http://www.cnblogs.com/lmei/p/3485649.html", encoder);


     

  • 相关阅读:
    jenkins 添加用户管理权限
    jenkins+svn 自动化上线
    harbor私有仓库安装
    zabbix 监控 tcp 连接数
    zabbix 监控https URL
    chattr +i 用户也没法随意删除
    MySQL 8.0权限认证(下)
    MySQL 8.0权限认证(上)
    MySQL 8.0二进制包安装
    RPM命令总结
  • 原文地址:https://www.cnblogs.com/lmei/p/3513773.html
Copyright © 2011-2022 走看看