📅  最后修改于: 2023-12-03 14:57:04.064000             🧑  作者: Mango
当我们需要在程序中获取某个网站上的内容,一般我们会使用网页抓取的方式来获取。使用C#语言进行网页抓取是一种非常常见的方式。
本篇文章将会介绍使用C#语言进行网页抓取动态内容的方法,具体步骤如下:
在代码文件头部需要引入以下命名空间:
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
System.Net
命名空间提供用于处理网络请求和数据的基本类和接口。System.IO
命名空间提供控制台、文件和数据流操作的类和接口。System.Text.RegularExpressions
命名空间提供正则表达式的功能。
HttpClient
HttpClient
是一个HTTP客户端,它可以发送HTTP请求并获取HTTP响应。实例化HttpClient
之前,需要创建一个HttpHandler
,并且在创建HttpClient
时将其提供给HttpClient
构造函数。
var handler = new HttpClientHandler();
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var client = new HttpClient(handler);
因为有些网站会根据请求的header来判断这个请求是否合法,因此有些网站可能需要设置header才能访问。以下是示例代码:
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.8");
client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
现在我们已经准备好发送HTTP请求,获取HTTP响应了。以下是示例代码:
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
现在我们已经获取到了网页的HTML代码,需要从中提取需要的内容。这里我们可以使用正则表达式来解析。以下是示例代码:
string pattern = @"<div class=""title"">(.+?)</div>";
Regex regex = new Regex(pattern, RegexOptions.Singleline);
MatchCollection matches = regex.Matches(responseBody);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
using System;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var handler = new HttpClientHandler();
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.8");
client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36");
string url = "https://www.example.com";
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
string pattern = @"<div class=""title"">(.+?)</div>";
Regex regex = new Regex(pattern, RegexOptions.Singleline);
MatchCollection matches = regex.Matches(responseBody);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
}
}
以上是使用C#语言进行网页抓取动态内容的方法,通过以上步骤,程序员们可以轻松地完成网页抓取任务。