手把手实操:C# 编写爬虫并对接 EMLOG 接口实现数据库安全存储

大家好,我是零点博客的主理人。最近不少粉丝在后台私信,问怎么用 C# 做一个简单的数据聚合工具,特别是想把第三方数据同步到基于 EMLOG 的个人博客里。今天这篇文章,我就不整那些虚头巴脑的理论,直接上实操教程。我们会用 C# 处理 HTML 正则提取,对接接口,最重要的是——如何防止 SQL 注入,把数据安全地写进 MySQL。

一、 环境准备与正则提取(爬虫基础)

首先,咱们需要一个 .NET 8 的控制台项目。核心逻辑不是后端框架,而是正则表达式的运用。假设我们要从一个目标页面抓取文章标题。

using System.Text.RegularExpressions;

// 模拟抓取的原始 HTML
string htmlContent = "

C# 是一门优美的语言

"; // 编写正则,提取 h1 标签内的内容 string pattern = @"<h1>(.*?)</h1>"; Match match = Regex.Match(htmlContent, pattern); if (match.Success) { Console.WriteLine($"抓取成功:{match.Groups[1].Value}"); }

注意看上面的正则,只要抓住了非贪婪模式 `(.*?)`,你就抓住了标题。这是爬虫开发中最基础也是最重要的一步,毕竟数据源头如果错了,后面全白搭。

二、 数据封装与 JSON 解析

拿到数据后,我们需要封装成一个类,方便传输。这里涉及到 JSON 的解析。对于 EMLOG 这种轻量级系统,通常接口返回的数据都是 JSON 格式。

public class BlogPost
{
    public int id { get; set; }
    public string title { get; set; }
    public string content { get; set; }
}

// 假设这是接口返回的字符串
string jsonResponse = "{"id":1,"title":"C# 实战教程","content":"..."}";

// 使用 System.Text.Json 解析
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var post = JsonSerializer.Deserialize<BlogPost>(jsonResponse, options);

这一步非常关键,数据从爬虫层到接口层的转换,必须标准。我在零点博客的架构设计中,经常看到有人直接拼接字符串传参,这就是典型的写法错误,后续维护极其痛苦。

三、 安全对接后端接口

现在我们拿到了 `post` 对象,接下来要把它发送给 EMLOG 的后端接口。在 C# 中,最常用的就是 HttpClient。这里要注意发送的是 POST 请求,Content-Type 必须是 application/json。

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://your-emlog-site.com/");
    var content = new StringContent(JsonSerializer.Serialize(post), Encoding.UTF8, "application/json");

    var response = await client.PostAsync("/api/save_post", content);

    if (response.IsSuccessStatusCode)
    {
        Console.WriteLine("接口调用成功");
    }
}

这里没有用 WebView 或者 Selenium,而是直接通过 HTTP 请求去调用后端。这种方式性能最好,特别适合做定时任务。

四、 避坑指南:MySQL 预处理与防注入

如果你是要自己写一个后端,把抓来的数据存入 MySQL,那就必须提到SQL注入防护。千万不要使用字符串拼接 SQL!无论是 PHP 还是 C#,新手最容易犯这个错。

正确的姿势是使用预处理语句

string sql = "INSERT INTO emlog_post (title, content) VALUES (@Title, @Content)";
using (var cmd = new MySqlCommand(sql, connection))
{
    cmd.Parameters.AddWithValue("@Title", post.title);
    cmd.Parameters.AddWithValue("@Content", post.content);
    cmd.ExecuteNonQuery();
}

看,这里的 `@Title` 是参数占位符,数据库引擎会把它当成纯文本处理,完全隔绝了恶意脚本注入的风险。这是所有后端开发人员的底线。

五、 总结

从 HTML 的正则提取,到 JSON 的解析传输,再到后端接口的调用和数据库的安全存储,这就是一个完整的数据流闭环。如果你正在学习C# 后端开发,或者维护一个 EMLOG 博客想折腾点新功能,这套流程是必须要掌握的。

如果你在实操中遇到问题,欢迎在零点博客留言,我们一起交流。