技术笔记:从零开发C#爬虫提取EMLOG数据并安全入库

大家好,我是博主。最近在零点博客折腾后台开发,为了整理历史文章,决定自己写个简单的C#爬虫来解析 EMLOG 的源码并入库。这不是为了偷懒,而是为了搞懂底层逻辑。在这个过程中,我发现很多初学者忽略了接口开发中的安全细节,特别是SQL注入防护。今天就把这次实操的技术笔记复盘一下,代码都是现成可用的。

一、 目标:解析EMLOG与数据清洗

我们要做的很简单:抓取一个 EMLOG 站点的列表页,提取标题、摘要和发布时间,然后存到我们自己的MySQL数据库里。这就涉及到HTML/CSS/JS前端开发中常见的“爬取”逻辑,只不过这里我们用 C# 来写后端。

二、 核心流程:HttpClient + 正则表达式

首先,我们通过 HttpClient 发起请求。拿到 HTML 源码后,硬解析太痛苦了,所以利用正则表达式是最高效的方案。

1. 获取源码

using System.Net.Http;
using System.Threading.Tasks;

// 模拟一个简单的客户端
using var client = new HttpClient();
var response = await client.GetStringAsync("http://example.com/?action=article_list");
// response 即为获取到的HTML字符串

2. 正则提取数据

EMLOG 的文章标题通常在 <h3> 标签里。我们需要构造正则来精准匹配。

string pattern = @"<h3>(.+?)</h3>";
MatchCollection matches = Regex.Matches(response, pattern);
foreach (Match match in matches)
{
    string title = match.Groups[1].Value; // 提取标题
    Console.WriteLine($"获取标题: {title}");
}

三、 安全与存储:避开SQL注入大坑

拿到数据后,直接拼 SQL 是大忌!这是我做接口开发时必须强调的一点。无论数据是来自用户输入还是爬虫抓取,都必须经过严格过滤。

1. 使用预处理语句

在连接MySQL数据库时,一定要使用参数化查询,千万不要手动拼接字符串。下面是结合我们提取的数据进行安全入库的代码:

using (MySqlConnection conn = new MySqlConnection("Server=localhost;Database=testdb;User=root;Password=xxx;"))
{
    conn.Open();
    string sql = "INSERT INTO articles (title, content) VALUES (@title, @content)";

    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 核心点:使用 @参数 占位,数据库自动转义,杜绝SQL注入
        cmd.Parameters.AddWithValue("@title", title);
        cmd.Parameters.AddWithValue("@content", summary);

        cmd.ExecuteNonQuery();
    }
}

四、 避坑指南与总结

  • 爬虫封禁问题: EMLOG 如果开启了防爬,建议在代码中加入随机的 User-Agent 模拟浏览器,或者稍微控制一下请求频率。
  • JSON解析: 如果接口返回的是 JSON/XML 格式,可以用 Newtonsoft.Json 库直接反序列化,比正则更稳健。
  • 零点博客开发心得: 很多时候,后台开发不仅仅是写接口,更是关于安全意识。本文的 技术笔记 仅仅是个开始,真正复杂的系统还需要涉及微服务架构。

希望这篇关于 C# 爬虫与 MySQL 入库的实操教程能帮到大家。如果有源码需求,欢迎在零点博客留言!