<!DOCTYPE html>

零点博客实战:C#实现EMLOG数据爬虫与后端接口开发全解

零点博客实战:C#实现EMLOG数据爬虫与后端接口开发全解

最近在维护零点博客,为了给移动端提供更高效的数据支持,我打算写一套独立的接口服务。这事儿折腾了两天,踩了不少坑,今天把后端接口开发实战中关于爬虫、MySQL操作以及安全防护的干货全部复盘出来,希望能帮到大家。

为什么选择C#做爬虫和接口?

很多人问,EMLOG是PHP写的,直接用PHP写接口不好吗?我试过,PHP处理高并发和正则匹配大段HTML时确实有点吃力。这次我决定用C# .NET作为后端主力,配合MySQL做数据库存储。C#在处理并发请求、JSON解析以及正则表达式匹配上优势明显,是进行后端接口开发实战的不二之选。

第一步:网络请求与HTML解析

我们的目标是抓取目标站点的文章列表。这里需要用到HttpClient。

using (HttpClient client = new HttpClient())
{
    // 模拟浏览器请求头,防止被反爬
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 ...");

    // 发送GET请求
    string html = await client.GetStringAsync("https://example.com/list.html");

    // 这里我们可以结合正则表达式提取关键信息
    // 正则示例:匹配文章标题
    var match = Regex.Match(html, @"<h3 class="title">(.+?)</h3>", RegexOptions.IgnoreCase);

    if (match.Success)
    {
        string title = match.Groups[1].Value;
        Console.WriteLine("抓取到标题: " + title);
    }
}

这里用到正则表达式来精准定位HTML中的内容。在实战中,大家一定要注意HTML结构的变化,否则正则就会失效。

第二步:对接MySQL与SQL注入防护

数据抓下来之后,得存到零点博客的MySQL数据库里。这是最容易被忽视的环节。SQL注入是老生常谈但又是必坑点。如果你直接拼接SQL字符串,黑客随便输入个 `1' OR '1'='1` 就能炸库。

正确做法是使用预处理语句(Parameterized Queries):

using (MySqlConnection conn = new MySqlConnection(connectionString))
{
    string sql = "INSERT INTO emlog_articles (title, content, post_time) VALUES (@title, @content, @time)";

    MySqlCommand cmd = new MySqlCommand(sql, conn);

    // 关键!使用参数化查询,完全隔绝SQL注入风险
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@content", htmlContent);
    cmd.Parameters.AddWithValue("@time", DateTime.Now);

    conn.Open();
    cmd.ExecuteNonQuery();
}

第三步:JSON数据解析与接口封装

最后,我们需要把数据转换成JSON格式,供前端调用。C#的 Newtonsoft.Json 库非常强大,一行代码搞定:

var result = new
{
    code = 200,
    message = "success",
    data = new[]
    {
        new { id = 1, title = title, url = "https://zidian.blog/article/1" }
    }
};

// 将对象转换为JSON字符串
string jsonOutput = JsonConvert.SerializeObject(result, Formatting.Indented);

// 返回给前端
return Content(jsonOutput, "application/json");

避坑指南与总结

  • 乱码问题:抓取网页时经常遇到UTF-8和GBK混杂的情况,务必统一用UTF-8解析,或者在Header里显式指定。
  • 超时设置:网络请求如果不设置超时,目标站挂了你的接口也会一直转圈,建议设置 30s 超时。
  • 代码复用:不要把所有逻辑都写在一个文件里,推荐把爬虫、数据库操作和API控制器拆分开,方便维护。

这次的后端接口开发实战虽然看似简单,但把爬虫开发、正则匹配、SQL注入防护以及JSON处理串联起来,才能真正理解一个接口系统的底层逻辑。源码我已经整理好,直接开源到了零点博客,大家拿去改造就行!