如何抓取网页数据

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网页源码中规则数据的获取过程:

第一步:获取网页源码。

第二步:使用正则表达式匹配抽取所需要的数据。

第三步:将结果进行保存。

这里只介绍第一步。

.HttpWebRequest;

.HttpWebResponse;

System.IO.Stream;

System.IO.StreamReader;

System.IO.FileStream;

通过C#程序来获取访问页面的内容(网页源代码)并实现将内容保存到本机的文件中。

方法一是通过的两个关键的类

.HttpWebRequest;

.HttpWebResponse;

来实现的。

具体代码如下

方案0:网上的代码,看明白这个就可以用方案一和方案二了

HttpWebRequest httpReq;

HttpWebResponse httpResp;

string strBuff = "";

char[] cbuffer = new char[256];

int byteRead = 0;

string filename = @"c:\log.txt";

///定义写入流操作

public void WriteStream()

{

Uri httpURL = new Uri(txtURL.Text);

///HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest 的Creat方法建立,并进行强制的类型转换

httpReq = (HttpWebRequest)WebRequest.Create(httpURL);

///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换

httpResp = (HttpWebResponse) httpReq.GetResponse();

///GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容///若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生

ProtoclViolationException错误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理

Stream respStream = httpResp.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)

StreamReader respStreamReader = new StreamReader(respStream,Encoding.UTF8);

byteRead = respStreamReader.Read(cbuffer,0,256);

while (byteRead != 0)

{

string strResp = new string(cbuffer,0,byteRead);

strBuff = strBuff + strResp;

byteRead = respStreamReader.Read(cbuffer,0,256);

}

respStream.Close();

txtHTML.Text = strBuff;

}

///定义写入文件操作

public void WriteFile()

{

///要将结果存储至文件中,可利用FileStream类建立文件数据流,并以Write方法将HTML内容写入到文件

FileStream fileStream = new FileStream(filename,FileMode.OpenOrCreate,FileAccess.Write);

byte[] byteSave = Encoding.UTF8.GetBytes(txtHTML.Text.ToString()); ///保存为txt文件时编码方式为UTF8

fileStream.Write(byteSave,0,byteSave.Length);

fileStream.Close();

}

private void btnwrite_Click(object sender, EventArgs e)

{

WriteStream();

WriteFile();

}

方案一、如果不需要POST参数可用下边的方案

由于是在WinForm下写的代码,因此会有using System.Windows.Forms;命名空间,错误提示框需要这个命名空间。

using System;

using System.Collections.Generic;

using System.Collections;

using System.Text;

using System.Data;//这个可以不要

using ;

using System.IO;

using System.Text.RegularExpressions;//正则表达式的命名空间

using System.Windows.Forms;

///

/// 根据链接获得网页内容

///

/// 超链接地址

相关文档
最新文档