爬蟲技術(六)-- 使用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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM