C# 抓取网页Html源码 ,网络爬虫

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

privatevoidSearch(stringurl)

{

stringrl;

WebRequest Request = WebRequest.Create(url.Trim());

WebResponse Response = Request.GetResponse();

Stream resStream = Response.GetResponseStream();

StreamReader sr =newStreamReader(resStream, Encoding.Default);

StringBuilder sb =newStringBuilder();

while((rl = sr.ReadLine()) !=null)

{

sb.Append(rl);

}

stringstr = sb.ToString().ToLower();

stringstr_get = mid(str,"<ul class=\"post_list\">","</ul>");

intstart = 0;

while(true)

{

if(str_get ==null)

break;

stringstrResult = mid(str_get,"href=\"","\"",outstart);

if(strResult ==null)

break;

else

{

lab[url] += strResult;

str_get = str_get.Substring(start);

}

}

}

privatestringmid(stringistr,stringstartString,stringendString)

{

intiBodyStart = istr.IndexOf(startString, 0);//开始位置

if(iBodyStart == -1)

returnnull;

iBodyStart += startString.Length;//第一次字符位置起的长度

intiBodyEnd = istr.IndexOf(endString, iBodyStart);//第二次字符在第一次字符位置起的首次位置

if(iBodyEnd == -1)

returnnull;

iBodyEnd += endString.Length;//第二次字符位置起的长度

stringstrResult = istr.Substring(iBodyStart, iBodyEnd - iBodyStart - 1);

returnstrResult;

}

privatestringmid(stringistr,stringstartString,stringendString,outintiBodyEnd)

{

//初始化out参数,否则不能return

iBodyEnd = 0;

intiBodyStart = istr.IndexOf(startString, 0);//开始位置

if(iBodyStart == -1)

returnnull;

iBodyStart += startString.Length;//第一次字符位置起的长度

iBodyEnd = istr.IndexOf(endString, iBodyStart);//第二次字符在第一次字符位置起的首次位置

if(iBodyEnd == -1)

returnnull;

iBodyEnd += endString.Length;//第二次字符位置起的长度

stringstrResult = istr.Substring(iBodyStart, iBodyEnd - iBodyStart - 1);

returnstrResult;

}

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