是一种Microsoft提供的用于开发Web应用程序的基于.NET框架的开发技术。能够使用多种编程语言(如C#、等)进行编写,其主要特点是优化了对服务器控件和完整事件模型的支持。
抓取网页数据即为利用程序自动获取互联网上的信息,并把这些信息进行处理。在一定程度上,抓取网页数据可以供开发人员用于信息的分析、资源的收集、市场调研等等。
作为一种流行的开发技术,也可以用于抓取网页数据。本篇文章主要介绍如何使用抓取网页数据,包括框架下的相关类库、使用HttpWebRequest来获取网页内容等。
2. 框架下的相关类
2.1 WebClient
WebClient是.NET框架中提供的一种工具类,其主要作用是帮助开发人员发送HTTP请求并进行响应结果的访问。通过WebClient,我们可以使用相对简单的代码实现网络资料的收发。
使用WebClient获取页面内容的一般流程如下:
1. 实例化WebClient对象
WebClient myWebClient = new WebClient();
2. 调用下载方法
string pageHTML = myWebClient.DownloadString(URL);
其中,URL表示目标页面的URL地址,DownloadString方法用来获取页面内容。
注意:在访问HTTPS协议的页面时,需要设置一种叫做ServicePointManager的类。
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) =>true;
这一行代码的含义是:不验证证书,直接返回true。
以下是一个使用WebClient抓取百度搜索结果的例子,其中pageHTML为获取到的页面内容:
WebClient myWebClient = new WebClient();
string URL = \"/s?wd=\";
myWebClient.Encoding = Encoding.UTF8;
string pageHTML = myWebClient.DownloadString(URL);
2.2 HttpWebRequest
HttpWebRequest是.NET框架中提供的一种用于执行Web请求的工具类,用于发送一些特定的请求到指定的URI地址。与WebClient不同的是,HttpWebRequest 模拟的是浏览器的行为。
使用HttpWebRequest获取页面内容的一般流程如下:
1. 实例化HttpWebRequest对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
2. 设置请求方式
request.Method = \"GET\"/\"POST\";
其中,GET和POST表示HTTP请求的方式。
3. 设置HTTP请求头部信息
request.ContentType = \"application/x-www-form-urlencoded\";
在请求头部信息中,我们需要指定编码方式,这里使用的是application/x-www-form-urlencoded,这也是最常使用的一种。
4. 获取响应
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
string pageHTML = readStream.ReadToEnd();
注意:HttpWebRequest和WebClient存在一点区别,即后者会自动去掉HTML标签,而前者则会返回完整的网站HTML。
以下是一个使用HttpWebRequest抓取百度搜索结果的例子,其中pageHTML为获取到的页面内容:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(\"/s?wd=\");
request.Method = \"GET\";
request.ContentType = \"application/x-www-form-urlencoded\";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
string pageHTML = readStream.ReadToEnd();
3. 使用示例
下面以一个实例来说明如何使用抓取网页数据。
实例需求:抓取豆瓣Top250电影页面的名称、导演、主演等信息,并通过显示在网页上。
步骤一:抓取网页内容
首先,我们需要获取到豆瓣Top250电影页面的URL。通过浏览器打开该页面并查看页面源代码,寻找和我们需求相符合的信息。我们发现,每个电影的信息都包含在class属性为“item”的div标签中。因此,我们可以通过正则表达式获取每个电影的信息。
WebClient myWebClient = new WebClient();
string URL = \"/top250?start=0&filter=\";
myWebClient.Encoding = Encoding.UTF8;
string pageHTML = myWebClient.DownloadString(URL);
string pattern = @\"
.*?
.*?(.*?).*?
(.*)
MatchCollection matches = Regex.Matches(pageHTML, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
List
foreach (Match match in matches)
{
Movie movie = new Movie();
movie.MovieName = match.Groups[1].Value.Trim();
movie.MovieDescription = match.Groups[2].Value.Trim();
movie.MovieDirector = match.Groups[3].Value.Trim();
movie.MovieMainActor = match.Groups[4].Value.Trim();
movie.MovieYear = match.Groups[5].Value.Trim();
movie.MovieScore = match.Groups[6].Value.Trim();
movie.MovieComments = match.Groups[7].Value.Trim();
movies.Add(movie);
}
这里,我们使用正则表达式获取页面中符合要求的电影信息,并将其存储在movie对象中。
步骤二:使用显示数据
下面,我们需要将获取到的数据通过显示在网页上。这里,我们使用GridView控件,如下所示:
将获取到的数据绑定到GridView控件中即可。代码如下:
GridView1.DataSource = movies;
GridView1.DataBind();
至此,我们完成了抓取网页数据的全部过程。完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using ;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindData();
}
private void BindData()
{
WebClient myWebClient = new WebClient();
string URL = \"/top250?start=0&filter=\";
myWebClient.Encoding = Encoding.UTF8;
string pageHTML = myWebClient.DownloadString(URL);
string pattern = @\"
.*?
.*?(.*?).*?
(.*)
MatchCollection matches = Regex.Matches(pageHTML, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
List
foreach (Match match in matches)
{
Movie movie = new Movie();
movie.MovieName = match.Groups[1].Value.Trim();
movie.MovieDescription = match.Groups[2].Value.Trim();
movie.MovieDirector = match.Groups[3].Value.Trim();
movie.MovieMainActor = match.Groups[4].Value.Trim();
movie.MovieYear = match.Groups[5].Value.Trim();
movie.MovieScore = match.Groups[6].Value.Trim();
movie.MovieComments = match.Groups[7].Value.Trim();
movies.Add(movie);
}
GridView1.DataSource = movies;
GridView1.DataBind();
}
}
public class Movie
{
public string MovieName { get; set; }
public string MovieDescription { get; set; }
public string MovieDirector { get; set; }
public string MovieMainActor { get; set; }
public string MovieYear { get; set; }
public string MovieScore { get; set; }
public string MovieComments { get; set; }
}
4. 总结
本文主要介绍了抓取网页数据的一般流程,包括框架下的相关类、使用HttpWebRequest来获取网页内容等。
在抓取网页数据的过程中,需要注意以下几点:
1. 页面中的服务器地址
在程序开发中,如果需要使用WebClient或HttpWebRequest抓取页面数据,需要确保程序运行的服务器与请求的页面在同一网络环境中。否则,会出现跨域请求的问题。
2. 数据识别
在页面抓取的过程中,需要对信息进行统一的数据类型处理,通常是使用正则表达式来处理。
3. 数据呈现
在应用程序中,可以使用最常用的控件来呈现抓取到的数据。例如,GridView控件可以将抓取到的数据呈现为表格形式。
在实际开发中,抓取数据的技巧可以应用于大量数据分析和数据挖掘工作中。在采集和处理数据时,必须注意编码、数据格式和数据质量的问题。同时,在数据展示时,需要考虑页面设计、交互性和信息呈现方式等细节问题。
Response是在客户端(浏览器、移动端应用等)向服务器发送请求后,服务器返回的数据,一般包括状态码、消息、响应头和响应正文。在Web开发中,我们经常需要通过网络请求获取服务器返回的数据来完成相应的业务逻辑。
2. 抓取内容的概念
在Web开发中,我们经常需要从目标网站中抓取数据,这些数据可以用于分析、展示和其他用途。抓取内容一般指的是从网站中获取网页的结构和文本信息,但不包括其他一些多媒体类型的内容(如图片、视频等)。
3. Response对象的属性
Response对象是JavaScript中处理网络请求的核心之一。在浏览器中,我们可以通过XMLHttpRequest对象(简称Ajax)实现对Response对象的访问和操作。在Node.js中,我们可以通过第三方库如axios、request等获取Response对象。
Response对象包含了多个属性,其中一些属性如下所示:
(1)status:响应状态码,一般用来表示请求是否成功,如200表示成功,404表示找不到页面等。
(2)headers:响应头信息,包括Content-Type(内容类型)、Content-Length(内容长度)等。
(3)data:响应内容,一般为字符串或二进制数据。
(4)statusText:响应状态文本,一般是一段描述性文字,如“Not Found”(找不到)。
(5)config:请求配置信息,包括请求的URL、请求的方法、请求的数据等。
4. 从Response对象中读取抓取内容
抓取网页的内容可以从Response对象的多个属性中读取,具体的方法如下:
(1)从data属性中读取
Response对象中的data属性是响应内容,一般为字符串或二进制数据。我们可以通过读取data属性来获取抓取到的内容。在使用Ajax库时,获取data属性的方法可能略有不同,一般应该参考相关文档或API。
(2)从headers属性中读取
Response对象中的headers属性是响应头信息,包括Content-Type(内容类型)、Content-Length(内容长度)等。我们可以通过headers属性来获取服务器返回的响应头信息。
(3)从config属性中读取
Response对象中的config属性包括了请求的URL、请求的方法、请求的数据等。我们可以通过config属性来获取请求的配置信息,从而获取到抓取到内容的对应URL等信息。
5. 总结
在Web开发中,抓取网页的内容是经常使用的操作之一。我们可以通过Response对象中的多个属性来读取抓取到的内容。具体的方法包括从data属性、headers属性、config属性等中读取。读取的方式可能会因网络请求的方式、库以及元素类型等的不同而略有不同。但无论采用何种方式,都建议在代码编写前先仔细研究并确定。