<!DOCTYPE html>
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数据迁移工具时,我遇到了三个典型问题:
- 乱码问题:爬回来的HTML中文全是乱码。解决办法是在HttpClient初始化时设置默认请求头为 UTF-8,否则数据库存进去也是乱码。
- 正则太慢:手动写正则匹配所有文章列表很累且慢。建议直接在C#中利用现有的HTML解析库,或者简化正则,只匹配你需要的核心ID字段。
- 数据类型转换:有些ID是字符串格式,存入MySQL INT类型会报错。记得在存入前用
Convert.ToInt32()做类型转换。
六、 总结
通过这次实战,我们不仅完成了EMLOG的数据迁移,还熟悉了 C#后端开发 的全流程。从正则提取、JSON解析到数据库的预处理存储,每一个环节都不容忽视。对于想要提升技能的同学,建议自己手写一套简易的后台管理工具,把底层逻辑跑通。



评论一下吧
取消回复