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. openstack虚拟机迁移的操作记录

    需求说明:计算节点linux-node1.openstack:192.168.1.8  计算节点linux-node2.openstack:192.168.1.17 这两个计算节点在同一个控制节点下( ...

  2. Lambda表达式关于like问题(未解决)

    参考文章: http://stackoverflow.com/questions/3616215/like-in-lambda-expression-and-linq 1. c=>c.name. ...

  3. U3D Debug.log的问题

    今天在测试有yield有关的问题时,发现Debug.log()是异步输出机制.不一定会在调用后立即执行. 在C++有类似问题:std::cout 也不一定会立即输出,加上"\n"或 ...

  4. [转]World Wind Java开发之四——搭建本地WMS服务器

    在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持 ...

  5. C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)

    http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...

  6. [CareerCup] 10.4 Find All Duplicates Elements 寻找所有的重复项

    10.4 You have an array with all the numbers from 1 to N, where N is at most 32,000. The array may ha ...

  7. 零散知识记录-Jira的安装

    Jira不支持openjdk,在linux下需要卸载后,装个jdk才行.

  8. ThreadLocal详解

    ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量. 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线 ...

  9. 总体最小二乘(TLS)

    对于见得多了的东西,我往往就习以为常了,慢慢的就默认了它的存在,而不去思考内在的一些道理.总体最小二乘是一种推广最小二乘方法,本文的主要内容参考张贤达的<矩阵分析与应用>. 1. 最小二乘 ...

  10. 『随笔』Socket 链接 必须 上下行 同时使用

    结论: > Socket 理论上 支持 只上行,或者 只下行. > 心跳包 必须是 上下行的 —— 心跳包请求(上行) - 心跳包响应(下行). > 如果 长时间 只有单向链接(只发 ...