如何抓取网页数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
///
/// 根据链接获得网页内容
///
/// 超链接地址