zoukankan      html  css  js  c++  java
  • 使用HtmlAgilityPack实现简单的博客园主页内容抓取(2014-03-31)


    一、时间:

      2014-03-31  18:08:32,又到了下班的时间了,忙了一天,也累了,中午都没吃饭。。。。。


    二、事件:

      win8刚出来那会,有个想法,想做一个第三方的博客园软件应用,奈何技术太渣,琐事良多,只能不了了之,最近想自己做个网站,于是就想抓取园子里面的内容,因为每天看博客都会让我成长,学到很多!


    三、实现方法:

      本来想自己存取网页,利用正则解析页面,奈何到解析标题时各种问题,而且自己想想也知道效率不是很高,于是就有了使用HtmlAgilityPack(下载地址:http://htmlagilitypack.codeplex.com/,开源的dll,很不错!)来实现网页解析,也可以用微软自己的mshtml,相对而言HtmlAgilityPack更好,于是就用了!


    四、代码简单实现:

     1 using System;
     2 using System.Collections;
     3 using System.IO;
     4 using System.Net;
     5 using System.Text;
     6 using System.Text.RegularExpressions;
     7 using HtmlAgilityPack;
     8 namespace 测试
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             ////指定请求
    15             //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.cnblogs.com/#p2");
    16 
    17             ////得到返回
    18             //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    19 
    20             ////得到流
    21             //Stream recStream = response.GetResponseStream();
    22 
    23             ////编码方式
    24             //Encoding gb2312 = Encoding.UTF8;
    25 
    26             ////指定转换为gb2312编码
    27             //StreamReader sr = new StreamReader(recStream, gb2312);
    28 
    29             ////以字符串方式得到网页内容
    30             //String content = sr.ReadToEnd();
    31 
    32             WebClient wc = new WebClient();
    33             wc.BaseAddress = "http://www.cnblogs.com/sitehome/p/2";
    34             wc.Encoding = Encoding.UTF8;
    35             HtmlDocument doc = new HtmlDocument();
    36             string html = wc.DownloadString("http://www.cnblogs.com/sitehome/p/2");
    37             doc.LoadHtml(html);
    38             string listNode = "/html/body/div[1]/div[4]/div[6]";
    39             string[] title = new string[20];
    40             string[] digest = new string[20];
    41             string[] time = new string[20];
    42             string[] uriList = new string[20];
    43             string str;
    44             HtmlNode node;
    45             for(int i=0;i<20;i++)
    46             {
    47                 str = listNode + "/div[" + (i+1) + "]/div[2]/h3[1]";
    48                 node = doc.DocumentNode.SelectSingleNode(str);
    49                 title[i]=node.InnerText;
    50                 str = listNode + "/div[" + (i+1) + "]/div[2]/p[1]";
    51                 node = doc.DocumentNode.SelectSingleNode(str);
    52                 digest[i] = node.InnerText;
    53                 str = listNode + "/div[" + (i+1) + "]/div[2]/div[1]";
    54                 node = doc.DocumentNode.SelectSingleNode(str);
    55                 Regex r = new Regex("\s20\d\d-\d\d-\d\d\s\d\d:\d\d");
    56                 Match m = r.Match(node.InnerText);
    57                 time[i] = m.ToString();
    58 
    59                 str = listNode + "/div[" + (i + 1) + "]/div[2]/h3[1]/a[1]";
    60                 node = doc.DocumentNode.SelectSingleNode(str);
    61                 uriList[i] = node.Attributes["href"].Value;
    62             }
    63             foreach(string str2 in title)
    64             {
    65                 Console.WriteLine(str2);
    66             }
    67             foreach (string str2 in uriList)
    68             {
    69                 Console.WriteLine(str2);
    70             }
    71             foreach (string str2 in time)
    72             {
    73                 Console.WriteLine(str2);
    74             }
    75             Console.ReadKey();         
    76         }

    五、结果:


    六、简单说明:

         前20行博客主题

         中间20行博客地址

         后面20行时间


    七、注意:

            1. http://www.cnblogs.com/sitehome/p/2 :主页第二页,前面使用http://www.cnblogs.com/#p2一直不行,看了源码部分的js才明白,

       2.本人技术有限,不喜勿喷,但是欢迎提意见交流,

         3.本人新建一群:交友&&知识学习&&职业交流,希望:互帮互助,互相学习。。。。闲人勿进,有意请冒泡一下!

  • 相关阅读:
    Python使用MySQL数据库的方法以及一个实例
    【转载】关于Python中的yield
    利用KMeans聚类进行航空公司客户价值分析
    Python多线程编程
    搜索与排名思路整理
    两个UIView添加同一个手势只有最后一个有用
    缩放动画效果
    iOS通过UIAlertController弹出底部选择框来调用相机或者相册
    ios webview点击图片看大图效果及相应手势操作
    iOS开发:获取设备IP地址
  • 原文地址:https://www.cnblogs.com/onoctober/p/3636582.html
Copyright © 2011-2022 走看看