零点博客复盘:基于C#实现EMLOG爬虫开发的避坑指南与源码拆解

最近在折腾自己的零点博客,为了实现跨平台内容聚合,我决定用 C# 写一个简单的爬虫开发工具,专门用于从其他网站采集数据并入库到本地的 EMLOG 博客系统中。踩了两天坑,把代码敲熟了,今天就把这套后端开发思路和SQL注入防护细节分享出来,全是干货。

一、 核心思路与技术选型

既然是爬虫开发,核心无外乎三个步骤:请求网页、解析数据、存储入库。考虑到我在做后端开发时主要用 C#,这次就顺手用 HttpClient 模拟浏览器请求,配合 正则表达式 提取文章标题和内容。数据存取这块,直接连本地的 MySQL 数据库。

一开始我直接用字符串拼接 SQL,结果被自己吓得够呛。后来查资料才知道,这是SQL注入防护的大忌。虽然这里只是本地爬虫开发,还没对外开放接口,但养成好习惯很重要。所以最终方案定下来了:C# HttpClient + 正则表达式解析 + MySQL 预处理语句

二、 爬虫核心代码实现(C#)

这里直接上关键部分的逻辑。主要就是处理请求头,模拟浏览器行为,避免被对方反爬。

string url = "https://target-site.com/feed";
using (var client = new HttpClient())
{
    // 设置 User-Agent,模拟浏览器访问,防止直接被拦截
    client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64)...");

    // 发送请求获取 HTML 源码
    string html = await client.GetStringAsync(url);

    // 使用正则表达式提取文章信息
    // 这里的正则逻辑是根据实际网页结构写的,大家要根据自己要采集的网站修改
    MatchCollection matches = Regex.Matches(html, "<title>(.*?)</title>", RegexOptions.IgnoreCase);

    foreach (Match match in matches)
    {
        string title = match.Groups[1].Value;
        Console.WriteLine("抓取到标题:" + title);
        // 保存或入库逻辑...
    }
}

三、 数据库安全入库:绝不能省的预处理语句

这是本文的重点。无论你是做接口开发还是爬虫开发,一旦涉及到数据库操作,SQL注入防护就是底线。下面这段代码演示如何使用参数化查询,彻底杜绝注入风险。

string connString = "Server=localhost;Database=emlog;User=root;Password=123;CharSet=utf8mb4;";
using (MySqlConnection conn = new MySqlConnection(connString))
{
    conn.Open();
    string sql = "INSERT INTO emlog_blog (title, content, post_date) VALUES (@Title, @Content, @Date)";

    // 强烈推荐使用预处理语句,防止 SQL 注入
    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 添加参数化查询,C# 会自动处理转义
        cmd.Parameters.AddWithValue("@Title", title);
        cmd.Parameters.AddWithValue("@Content", htmlContent);
        cmd.Parameters.AddWithValue("@Date", DateTime.Now);

        cmd.ExecuteNonQuery();
    }
}

四、 实战避坑与总结

在零点博客的这次开发中,我总结了几个必须要注意的点:

  1. 编码问题:很多网页是 GBK 编码,C# 默认 UTF-8,会导致正则匹配失败。记得用 `Encoding.GetEncoding("gbk")` 转换一下。
  2. 反爬虫机制:如果是高频请求,一定要加延时,或者伪造更复杂的 JSON/XML 数据包头。
  3. 数据解析:如果对方网站用 JSON 返回数据(类似现代 API 风格),就用 Newtonsoft.Json 库解析,比正则更高效、更稳定。

这套流程下来,我的 EMLOG 博客就已经开始自动更新文章了。对于想学习爬虫开发或者想做在线工具的朋友,这套代码复用率很高。核心就是:请求稳、解析准、入库安。希望这篇源码案例能帮到你!