<!DOCTYPE html>
拒绝SQL注入!手把手教你用C#和MySQL给EMLOG开发专属数据爬虫工具
哈喽大家好,我是零点博客的博主。昨天有粉丝在后台问我,EMLOG 作为轻量级 CMS,在做爬虫数据聚合时,直接操作数据库很头疼,而且安全风险大。其实咱们用 C# 后端开发来做这件事简直是降维打击,既能利用 C# 强大的生态处理 JSON 数据,又能利用 .NET 原生的预处理机制完美解决 SQL注入防护 问题。
一、 为什么要用 C# 搭建爬虫后端?
很多新手喜欢用 PHP 直接写爬虫,或者用 Python 写脚本导出 CSV 再导入 EMLOG 数据库。但这种方式在处理海量数据或高并发时,性能瓶颈很明显。咱们这次实操的目标是:
- 使用 C# 调用第三方 API 获取 JSON 数据。
- 编写正则表达式清洗数据。
- 通过 MySQL 预处理语句安全入库 EMLOG 数据库。
- 最后通过简单的 HTML/JS 前端展示执行结果。
二、 底层架构与数据库连接
首先,我们需要明确 EMLOG 默认的数据库结构。这里为了演示方便,我们只关注 `emlog_blog` 表。在 C# 中,我们使用 MySQL.Data 包。
特别注意:SQL注入防护 永远是第一优先级。不要使用字符串拼接 SQL 语句!
1. C# 数据库操作核心代码
using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
namespace ZeroPointBlogTools
{
public class EmlogCrawler
{
// 配置数据库连接字符串,本地测试可替换为你的 EMLOG 账号密码
private static string connStr = "Server=localhost;Database=emlog;User=root;Password=your_password;CharSet=utf8mb4;";
public void InsertData(string title, string content)
{
// C# 开发的精髓在于:使用参数化查询!
// 这一步彻底告别 SQL 注入,也是我强调的避坑指南第一条。
string sql = "INSERT INTO emlog_blog (title, content, author, date, hits, comnum, excerpt, gid, alias, password, template, allow_remark, sortid, vis, template_file, marked) VALUES (@title, @content, 1, @date, 0, 0, '', 0, '', '', '', 1, 0, 1, '', 0);";
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 添加参数,C# 会自动转义特殊字符
cmd.Parameters.AddWithValue("@title", title);
cmd.Parameters.AddWithValue("@content", content);
cmd.Parameters.AddWithValue("@date", DateTime.Now.ToString("Y-m-d H:i:s"));
int rows = cmd.ExecuteNonQuery();
Console.WriteLine($"插入成功 {rows} 条数据");
}
}
}
}
}
三、 JSON 数据解析与爬虫实战
拿到 API 返回的数据通常是 JSON 格式。C# 里的 `Newtonsoft.Json` 或者最新的 `System.Text.Json` 处理起来非常顺手。结合正则表达式清洗文本,是我们作为博主日常开发的必修课。
2. 模拟爬虫逻辑与数据清洗
using System.Net.Http;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
public async Task StartCrawlerAsync()
{
HttpClient client = new HttpClient();
string apiUrl = "https://api.example.com/news/list";
string responseText = await client.GetStringAsync(apiUrl);
// 使用正则表达式提取正文中的纯文本(去除 HTML 标签)
string cleanContent = Regex.Replace(responseText, @"<[^>]+>", "").Trim();
// 解析 JSON 中的标题
JObject json = JObject.Parse(responseText);
string title = json["data"][0]["title"].ToString();
// 实例化数据库操作类
var crawler = new EmlogCrawler();
crawler.InsertData(title, cleanContent);
Console.WriteLine("任务完成,数据已同步至 EMLOG");
}
四、 前端交互:HTML/CSS/JS 的轻量实现
爬虫只是后端,为了让这个功能变成“在线工具”,我们需要一个简单的 Web 界面。别搞太复杂的框架,原生 HTML/CSS/JS 最快。
3. 在线工具界面代码 (index.html 示例)
零点博客专属数据聚合工具
五、 避坑指南与底层复盘
折腾完上述代码,我再总结一下我踩过的坑,大家开发时尽量避开:
- 字符编码问题: EMLOG 数据库默认是 UTF-8,如果 C# 连接串没指定 CharSet=utf8mb4,写入中文会乱码。
- 事务处理: 如果一次爬取 100 条数据,建议加上 `TransactionScope`,只要有一条失败,全部回滚,保证数据一致性。
- 连接池: 在高并发下,不要在循环中创建连接,一定要 `using` 包裹,让连接池管理资源。
- 正则匹配: JSON 里如果有转义字符,记得使用 `RegexOptions.Compiled` 提升解析性能。
这套 C# + MySQL 的组合拳在零点博客的很多实战项目中都验证过,非常稳定。如果你有更好的 EMLOG 优化思路,欢迎在评论区交流!



评论一下吧
取消回复