C#编程实战:手把手开发自定义爬虫采集EMLOG源码,附SQL注入与正则避坑指南

前两天我在整理零点博客的素材时,发现手动下载EMLOG主题源码太累了,而且很多优秀的后台管理系统封装得很好。作为一个C#编程爱好者,与其去求别人写接口,不如自己撸一个爬虫开发工具。今天就把这次从0到1开发在线工具的全过程复盘一下,顺便聊聊MySQL数据库操作和SQL注入防护这些必须要懂的干货。

一、 项目背景与技术栈选型

这次的需求很简单:抓取某开源站点上关于EMLOG和C#相关的主题包,解析其中的配置文件,提取核心代码并存入本地数据库。

  • 后端语言: C# (ASP.NET Core)
  • 前端交互: HTML/CSS/JS (原生开发,减少依赖)
  • 数据存储: MySQL (5.7+)
  • 工具库: Newtonsoft.Json (JSON解析), HtmlAgilityPack (HTML解析)

二、 爬虫核心逻辑与HTML解析

写爬虫第一步是发送请求。大家注意,现在很多网站都有反爬,我们可以模拟浏览器头部,或者增加下载延迟。拿到响应后,我们需要解析HTML。

直接使用正则表达式处理HTML有时会因为标签变化而失效,所以我推荐使用HtmlAgilityPack。不过为了保持代码轻量,在处理纯文本数据(如标题、描述)时,用正则表达式往往更直观。下面是一个提取H3标签标题的示例:

string html = "...";
// 提取标题的正则,避免匹配到导航栏里的文字
Regex regex = new Regex(@"<h3[^>]*>(?<title>[^<]+)</h3>", RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches(html);

foreach (Match match in matches)
{
    string title = match.Groups["title"].Value.Trim();
    Console.WriteLine($"采集到主题:{title}");
}

三、 接口开发与JSON数据交互

采集到的数据通常是结构化的,我们需要将其转换为JSON/XML数据解析格式。这里我们开发一个简单的API接口,把采集到的主题信息以JSON格式返回给前端。

[ApiController]
[Route("api/[controller]")]
public class ThemeController : ControllerBase
{
    [HttpGet("list")]
    public IActionResult GetThemes()
    {
        var themes = new List<ThemeModel>();
        // 模拟从数据库查询数据
        // ... 数据库查询逻辑 ...
        return Ok(themes);
    }
}

四、 数据库操作与SQL注入防护(重点!)

在存入MySQL时,SQL注入防护是绝对不能妥协的红线。很多新手喜欢字符串拼接SQL,比如:string sql = "insert into themes values('" + name + "')";,这是非常危险的。

正确的做法是使用预处理语句(Parameterized Queries)。这样数据库引擎会把你的输入当作纯文本处理,而不是SQL命令。

string sql = "INSERT INTO theme_list (name, author, version) VALUES (@Name, @Author, @Version)";

using (var cmd = new MySqlCommand(sql, conn))
{
    // 关键点:使用参数化查询,完全杜绝SQL注入风险
    cmd.Parameters.AddWithValue("@Name", themeName);
    cmd.Parameters.AddWithValue("@Author", authorName);
    cmd.Parameters.AddWithValue("@Version", version);

    cmd.ExecuteNonQuery();
}

五、 底层避坑与开发总结

在这次开发过程中,我踩了不少坑,这里给新手的建议:

  1. 并发问题: 如果爬虫抓取频率太快,会被对方服务器封IP。建议在代码里加上随机延时,模拟人类操作。
  2. 字符编码: 前端展示乱码多半是因为HTML/CSS没有设置正确的 charset,或者后端数据库连接字符串没带 `charset=utf8mb4`。
  3. 代码复用: 尽量封装好公共的数据库操作类,避免到处写连接字符串。

通过这次实操,我深刻体会到C#编程在处理企业级应用时的严谨性。无论是后端的接口开发,还是前端的UI交互,只有底层逻辑扎实,才能开发出好用的在线工具。

如果你也在学习编程,欢迎关注零点博客,我会定期分享更多关于C#、PHP后端以及爬虫开发的源码案例!