前言:博主在零点博客的踩坑复盘

大家好,我是零点博客的博主。做网站久了,经常会遇到内容匮乏的尴尬时刻。为了解决这个问题,我最近在研究用 C# 爬虫开发 来解决内容来源问题,并将其集成到我的 EMLOG 博客系统中。这可不是简单的抓取,重点在于如何将数据安全地存入 MySQL,以及前端如何优雅地展示 JSON 数据。

很多新手像我之前一样,直接拼 SQL 语句,结果被 SQL注入防护 教做人。今天这篇 实操教程 就带大家从零开始,一步步落地这个功能。

一、 项目架构设计:后端C#与前端EMLOG的对话

我们的目标是:C# 爬虫抓取目标网页 -> 提取核心数据 -> 通过 接口开发 传输给前端 -> EMLOG 解析 JSON/XML 展示。

  • 后端: 使用 C# (ASP.NET Core 或控制台程序均可) 进行数据抓取,核心是 HttpClient 和 Regex 正则表达式。
  • 数据库: 操作 EMLOG 原生的 emlog_article 表,存储爬取的数据。
  • 前端: HTML/CSS/JS 负责数据的渲染。

二、 核心环节:C# 爬虫数据抓取与清洗

我们先看后端代码。为了保证稳定性,我们模拟真实的浏览器请求头,防止被目标网站的反爬策略拦截。

string url = "https://example.com/news";
// 使用 HttpClient 模拟浏览器
using (var httpClient = new HttpClient()) 
{
    httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0...");
    var response = await httpClient.GetStringAsync(url);

    // 利用正则提取标题和链接
    // 这里只是一个简化示例,实际开发中需根据目标网页结构调整
    MatchCollection matches = Regex.Matches(response, "<a[^>]+href="([^>]+)"[^>]*>([^>]+)</a>", RegexOptions.IgnoreCase);
    foreach (Match match in matches)
    {
        // 处理匹配到的数据...
        Console.WriteLine($"抓取到: {match.Groups[2].Value}");
    }
}

小贴士:在做爬虫时,正则表达式的性能至关重要。务必使用预编译的 Regex 对象。

三、 关键避坑:SQL注入防护与预处理语句

数据抓取回来了,下一步是入库。这是很多同学最容易出错的地方。绝对不要直接拼接字符串!

我们来看一段错误的示范(严禁模仿):

-- 错误示例:直接拼接用户输入,极度危险!
string sql = "INSERT INTO emlog_article (title, content) VALUES ('" + title + "', '" + content + "')";

如果用户的标题里包含恶意 SQL 语句,数据库就完蛋了。下面是正确的 SQL注入防护 实操教程 环节,使用预处理语句:

string sql = "INSERT INTO emlog_article (title, content) VALUES (@title, @content)";
using (var cmd = new MySqlCommand(sql, connection))
{
    // 使用参数化查询,数据库会自动转义特殊字符
    cmd.Parameters.AddWithValue("@title", title);
    cmd.Parameters.AddWithValue("@content", content);
    cmd.ExecuteNonQuery();
}

这种写法,无论用户输入什么字符,数据库都只会把它当作普通文本处理。

四、 接口开发与前端数据解析

数据存储后,我们需要一个简单的 接口开发 让前端调用。我们将 C# 处理好的数据转换为 JSON 格式返回。

[HttpGet("/api/get-external-news")]
public JsonResult GetExternalNews()
{
    // 查询数据库逻辑...
    var newsList = new List<NewsItem>();
    // 填充数据...
    return Json(newsList, JsonRequestBehavior.AllowGet);
}

在 EMLOG 的模板中,我们可以用原生的 JS 发起 AJAX 请求:

fetch('/api/get-external-news')
    .then(response => response.json())
    .then(data => {
        let html = '';
        data.forEach(item => {
            html += `

${item.title}

${item.content}

`; }); document.getElementById('news-container').innerHTML = html; });

五、 总结与零点博客的寄语

通过上面的 实操教程,大家可以看到,一个完整的 EMLOG 生态扩展,涵盖了后端的 C# 爬虫逻辑、严谨的 MySQL 防注入操作,以及前端的 HTML/CSS/JS 渲染。

开发过程中最大的坑往往在于数据编码(确保 UTF-8)和反爬虫检测。如果你在开发中也遇到过类似问题,欢迎在零点博客留言讨论。

保持代码整洁,安全第一!