<!DOCTYPE html>

C#实战:开发EMLOG数据迁移工具,MySQL存储与底层避坑指南

C#实战:开发EMLOG数据迁移工具,MySQL存储与底层避坑指南

大家好,我是零点博客的博主。最近在维护旧站EMLOG时,发现数据导出非常麻烦,于是决定用自己最擅长的 C# 开发一个简单的后端工具,把数据平滑迁移到新架构的数据库中。这过程踩了不少坑,今天把这份源码案例和底层逻辑复盘分享出来。

一、 为什么选择C#做爬虫与数据处理?

虽然PHP也能做,但在处理大量HTML解析和JSON/XML数据转换时,C#的 System.Text.RegularExpressions 和 StringBuilder 性能优势很明显。我们这次的任务很简单:抓取EMLOG列表页 -> 提取文章信息 -> 存入本地MySQL。

二、 核心技术栈与准备

这个工具主要用到了以下技术点,大家在使用时可以对照检查:

  • 后端开发 (C#):负责接收请求和逻辑处理。
  • 前端交互:简单的HTML页面展示进度条。
  • 爬虫开发:通过HttpClient模拟浏览器获取数据。
  • 正则表达式:提取页面中的文章标题、ID和发布时间。
  • MySQL数据库:数据落地存储。

三、 实战代码:从HTTP请求到JSON解析

这里直接上干货。首先我们需要发送GET请求获取页面HTML,然后使用正则提取我们需要的信息。不要直接拼接SQL,这是大忌。

// 伪代码示例:获取数据并使用正则提取
using (var httpClient = new HttpClient())
{
    var htmlContent = await httpClient.GetStringAsync("https://www.emlog.net/post.php?id=1");

    // 使用正则提取标题
    var titleMatch = Regex.Match(htmlContent, "(.*?)");

    // 解析JSON字段 (假设页面嵌入了JSON数据)
    var jsonStr = Regex.Match(htmlContent, "var data = (.*?);", RegexOptions.Singleline).Groups[1].Value;
    var articleData = JsonSerializer.Deserialize<ArticleModel>(jsonStr);
}

四、 关键点:SQL注入防护与预处理语句

在将C#抓取的数据存入MySQL时,我强烈建议使用预处理语句。无论数据来源是爬虫抓取还是前端传来的参数,必须经过验证和转义。

string sql = "INSERT INTO articles (title, content) VALUES (@Title, @Content)";
using (var cmd = new MySqlCommand(sql, conn))
{
    cmd.Parameters.AddWithValue("@Title", titleMatch.Value);
    cmd.Parameters.AddWithValue("@Content", ""); // 避坑:空内容先存为空
    cmd.ExecuteNonQuery();
}

这种写法能从底层杜绝SQL注入风险,是后端开发人员的必修课。

五、 真人复盘:开发中的底层避坑指南

在开发这个EMLOG数据迁移工具时,我遇到了三个典型问题:

  1. 乱码问题:爬回来的HTML中文全是乱码。解决办法是在HttpClient初始化时设置默认请求头为 UTF-8,否则数据库存进去也是乱码。
  2. 正则太慢:手动写正则匹配所有文章列表很累且慢。建议直接在C#中利用现有的HTML解析库,或者简化正则,只匹配你需要的核心ID字段。
  3. 数据类型转换:有些ID是字符串格式,存入MySQL INT类型会报错。记得在存入前用 Convert.ToInt32() 做类型转换。

六、 总结

通过这次实战,我们不仅完成了EMLOG的数据迁移,还熟悉了 C#后端开发 的全流程。从正则提取、JSON解析到数据库的预处理存储,每一个环节都不容忽视。对于想要提升技能的同学,建议自己手写一套简易的后台管理工具,把底层逻辑跑通。