http://www.cnblogs.com/wxxian001/archive/2011/09/07/2169519.html

刚刚完成一个简单的网络爬虫,因为在做的时候在网上像无头苍蝇一样找资料。发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路。

首先是抓取Html源码,并选择<ul class="post_list">  </ul>节点的href:要添加 using System.IO;using System.Net;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
private void Search(string url)
{
    string rl;
    WebRequest Request = WebRequest.Create(url.Trim());
 
    WebResponse Response = Request.GetResponse();
 
    Stream resStream = Response.GetResponseStream();
 
    StreamReader sr = new StreamReader(resStream, Encoding.Default);
    StringBuilder sb = new StringBuilder();
    while ((rl = sr.ReadLine()) != null)
    {
        sb.Append(rl);
    }
 
 
    string str = sb.ToString().ToLower();
 
    string str_get = mid(str, "<ul class=\"post_list\">""</ul>");
 
 
    int start = 0;
    while (true)
    {
        if (str_get == null)
            break;
        string strResult = mid(str_get, "href=\"""\""out start);
        if (strResult == null)
            break;
        else
        {
            lab[url] += strResult;
            str_get = str_get.Substring(start);
        }
    }
}
 
 
 
 
private string mid(string istr, string startString, string endString)
{
    int iBodyStart = istr.IndexOf(startString, 0);               //开始位置
    if (iBodyStart == -1)
        return null;
    iBodyStart += startString.Length;                           //第一次字符位置起的长度
    int iBodyEnd = istr.IndexOf(endString, iBodyStart);         //第二次字符在第一次字符位置起的首次位置
    if (iBodyEnd == -1)
        return null;
    iBodyEnd += endString.Length;                              //第二次字符位置起的长度
    string strResult = istr.Substring(iBodyStart, iBodyEnd - iBodyStart - 1);
    return strResult;
}
 
 
private string mid(string istr, string startString, string endString, out int iBodyEnd)
{
    //初始化out参数,否则不能return
    iBodyEnd = 0;
 
    int iBodyStart = istr.IndexOf(startString, 0);               //开始位置
    if (iBodyStart == -1)
        return null;
    iBodyStart += startString.Length;                           //第一次字符位置起的长度
    iBodyEnd = istr.IndexOf(endString, iBodyStart);         //第二次字符在第一次字符位置起的首次位置
    if (iBodyEnd == -1)
        return null;
    iBodyEnd += endString.Length;                              //第二次字符位置起的长度
    string strResult = istr.Substring(iBodyStart, iBodyEnd - iBodyStart - 1);
    return strResult;
}

好了,上面就是全部代码了,如果你想要运行出来的话,有些细节要自己修改下。

C# 抓取网页Html源码 (网络爬虫)的更多相关文章

  1. C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载

    下载地址 ** dome **

  2. Python数据抓取(2) —简单网络爬虫的撰写

    (一)使用Requests存储网页 Requests 是什么?网络资源(URLs)抓取套件 优点? 改善urllib2的缺点,让使用者以最简单的方式获取网络资源 可以使用REST操作(POST,PUT ...

  3. [Python]网络爬虫(一):抓取网页的含义和URL基本构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...

  4. [转]Linux Socket编程 Socket抓取网页源码

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  5. 使用Socket抓取网页源码

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. Asp.net 使用正则和网络编程抓取网页数据(有用)

    Asp.net 使用正则和网络编程抓取网页数据(有用) Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </su ...

  7. C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现

    我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...

  8. Python -- 网络编程 -- 简单抓取网页

    抓取网页: urllib.request.urlopen(url).read().decode('utf-8')  ---  (百度是utf-8,谷歌不是utf-8,也不是cp936,ascii也不行 ...

  9. [转载]爬虫的自我解剖(抓取网页HtmlUnit)

    网络爬虫第一个要面临的问题,就是如何抓取网页,抓取其实很容易,没你想的那么复杂,一个开源HtmlUnit包,4行代码就OK啦,例子如下: 1 2 3 4 final WebClient webClie ...

随机推荐

  1. kvm虚拟机时间修改

    在虚拟化环境中,虚拟机在长时间运行过程中,时间会变慢,通常的作法是配置ntpdate定时与时间服务器进行时间同步的计划任务.KVM虚拟机默认采用utc时间,需要专门修改,以及考虑kvm时间同步问题.1 ...

  2. iOS中使用RSA对数据进行加密解密

    RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...

  3. localStroage的用法

    Cookie 每个域名存储量比较小(各浏览器不同,大致4K) 所有域名的存储量有限制(各浏览器不同,大致4K) 有个数限制(各浏览器不同) 会随请求发送到服务器 LocalStorage 永久存储 单 ...

  4. ajax技术的应用?

    1,百度输入后的提示 2,新浪登录之后只刷新用户名

  5. kprobe原理解析(一)

    kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的“基础设施”,4.0版本的内核中,强大的eBPF特性 ...

  6. C/C++关于string.h头文件和string类

    学习C语言时,用字符串的函数例如stpcpy().strcat().strcmp()等,要包含头文件string.h 学习C++后,C++有字符串的标准类string,string类也有很多方法,用s ...

  7. memcached协议

    memcached协议 旧版:http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt 新版:https://githu ...

  8. JavaScript及其异步实现续:Promise让一切更简单

    在写这篇文章之前,我参考了以下文章.所以我文中的例子都是精准的,而且有循可依.下面抛出例子的链接: Understanding JQuery.Deferred and Promise Deferred ...

  9. 关于浏览器cookie的那些事儿

    昨天接到一个小需求,就是在ipad上访问某页面,页面顶部出现一个下载客户端的提示,点击关闭按钮后,提示信息消失,信息存入cookie,在cookie未过期之前,除非用户自己清除浏览器的cookie,否 ...

  10. MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统

    文章来源: Slark.NET-博客园http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-grid.html 上一节:ASP.NET MVC ...