零点博客实战:手写 C# EMLOG 内容爬虫与 SQL 防注入实操教程

大家好,我是零点博客的主理人。昨天在整理 EMLOG 数据时,发现手动复制粘贴太繁琐,于是我决定用 C# 写一个简单的博客内容抓取工具。今天就把这次开发的底层逻辑和踩过的坑复盘给大家,这是一个完整的 实操教程,全程无废话,直接上干货。

一、 需求分析与技术栈选择

我们的目标是:访问目标 EMLOG 博客的 XML 接口,解析出文章标题和正文,并安全地存入本地 MySQL。

  • 前端交互:简单的 HTML/CSS 页面作为控制台。
  • 后端逻辑:C# 处理接口请求、数据解析及数据库存储。
  • 数据格式:XML 与 JSON 互转。
  • 核心安全:SQL注入防护。

二、 开发第一步:模拟接口请求与数据获取

首先,我们需要用 C# 的 HttpClient 模拟浏览器去获取数据。这是 接口开发 的基础。

using (var httpClient = new HttpClient())
{
    var response = await httpClient.GetAsync("https://www.example.com/feed.php?siteid=1");
    string xmlContent = await response.Content.ReadAsStringAsync();
    // 这里我们拿到了原始的 XML 字符串
}

注意:这里涉及到编码问题,通常 UTF-8 是首选,记得在配置中指定。

三、 第二步:正则表达式与 XML 解析实战

拿到 XML 后,我们要提取出标题。直接用字符串拼接虽然能实现,但利用正则表达式会更健壮。这也是很多初学者在 底层拆解 时容易忽略的细节。

string titlePattern = ".*?<title>(.+?)</title>";
Match match = Regex.Match(xmlContent, titlePattern, RegexOptions.IgnoreCase);
if (match.Success)
{
    string title = match.Groups[1].Value.Trim();
    Console.WriteLine($"抓取成功:{title}");
}

这个环节如果不处理好,后续的数据入库就会全是乱码或错误格式。在这个 实操教程 中,我建议大家使用 NuGet 包 Newtonsoft.Json 或 HtmlAgilityPack 来处理复杂的 DOM 结构,虽然 C# 原生的 XDocument 也很方便,但正则依然在简单清洗中大显身手。

四、 避坑指南:SQL注入防护与预处理语句

这是本次 实操教程 的重中之重。很多同学写完爬虫后,把数据拼接到 SQL 语句中直接执行,这是极度危险的。我们使用 SQL注入防护 技术。

❌ 错误示范(拼接字符串):

如果你数据库用户名写成了 ' OR '1'='1,数据就全泄露了。

string sql = $"INSERT INTO logs (title) VALUES ('{title}')";
// 这种写法非常容易导致数据库崩溃或数据篡改

✅ 正确做法:预处理语句

我们必须使用参数化查询。在 C# 连接 MySQL 时,使用 MySqlCommand 配合参数对象。

using (var connection = new MySqlConnection("connectionString"))
using (var command = new MySqlCommand("INSERT INTO logs (title, content) VALUES (@Title, @Content)", connection))
{
    command.Parameters.AddWithValue("@Title", title);
    command.Parameters.AddWithValue("@Content", content);
    connection.Open();
    command.ExecuteNonQuery();
}

这样,数据库会把传入的变量当作纯粹的“文本数据”处理,而不是执行命令。这也是 底层拆解 中必须掌握的防御工事。

五、 后端与前端的数据交互

工具做好了,我们想把它做成一个 在线工具。这时就需要 C# 后端暴露一个 API 给 HTML/CSS/JS 页面调用。

后端只需返回 JSON 格式的字符串,前端通过 fetch 或 ajax 获取数据并渲染。这种全栈开发思路在零点博客的日常维护中非常常用。

六、 总结

从发起请求到解析正则,再到使用预处理语句入库,这就是一个完整的 C# EMLOG 开发闭环。希望大家在实际代码中,不要只追求功能跑通,一定要重视安全细节。如果你在 爬虫开发 或 SQL 操作中遇到问题,欢迎在评论区留言,我会一一解答。