前言:博主在零点博客的踩坑复盘
大家好,我是零点博客的博主。做网站久了,经常会遇到内容匮乏的尴尬时刻。为了解决这个问题,我最近在研究用 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)和反爬虫检测。如果你在开发中也遇到过类似问题,欢迎在零点博客留言讨论。
保持代码整洁,安全第一!



评论一下吧
取消回复