📜  网页抓取动态内容c#(1)

📅  最后修改于: 2023-12-03 14:57:04.064000             🧑  作者: Mango

使用C#进行网页抓取动态内容

当我们需要在程序中获取某个网站上的内容,一般我们会使用网页抓取的方式来获取。使用C#语言进行网页抓取是一种非常常见的方式。

本篇文章将会介绍使用C#语言进行网页抓取动态内容的方法,具体步骤如下:

第一步:引入必要的namespace

在代码文件头部需要引入以下命名空间:

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来判断这个请求是否合法,因此有些网站可能需要设置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#语言进行网页抓取动态内容的方法,通过以上步骤,程序员们可以轻松地完成网页抓取任务。