C#爬虫实战:基于预处理语句的安全数据入库与EMLOG接口开发实操教程
大家好,我是零点博客的小编。最近在研究一些自动化运营的小工具,决定拿C#后端开发和MySQL数据库开刀,做一个简单的数据爬虫,把目标网站的数据清洗后写入我们自己的博客系统中。过程中踩了不少坑,特别是关于SQL注入防护这一块,很多初学者容易忽略。今天这篇长文,主要就是把这整个实操教程过程复盘给大家,全程干货,无AI套话,拒绝标题党。
一、 项目背景与环境搭建
我们的目标是:用C#编写一个控制台程序,模拟浏览器请求目标网页,解析HTML中的关键信息(标题、内容、标签),最后通过接口开发将数据存储到MySQL中。为了保持通用性,我这次以PHP/EMLOG的后端思路作为兼容参考,但核心代码用C#来实现。
环境准备:.NET 6/8 SDK,MySQL数据库,一个目标网页(这里用演示数据代替)。
二、 核心逻辑:爬虫的HTTP请求与JSON解析
首先是爬虫部分,这步比较基础。为了防止被反爬,我们在发送请求时,必须伪装User-Agent。
using HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 ...");
// 发起GET请求
HttpResponseMessage response = await client.GetAsync("https://www.example.com/article/1");
string html = await response.Content.ReadAsStringAsync();
拿到HTML字符串后,我们需要用正则表达式或者HTML解析库提取数据。这里我选用正则表达式做一个快速的底层拆解演示:
string titlePattern = @"<h1[^>]*>([^<]+)</h1>";
Match match = Regex.Match(html, titlePattern);
string title = match.Groups[1].Value.Trim();
三、 避坑指南:SQL注入防护与预处理语句实操
这是本篇实操教程的重点,也是区别于新手教程的核心。很多博主直接用字符串拼接SQL,这在C#/PHP后端开发中是大忌。如果用户输入的标题包含单引号,直接拼接会导致数据库崩溃。
错误示范(千万不要学):
string sql = $"INSERT INTO emlog_article(title) VALUES('{title}')";
在零点博客的过往分享中,我反复强调过SQL注入防护。正确的做法是使用预处理语句。数据库先编译好SQL模板,我们只负责填空。这种模式下,用户输入的单引号会被当作普通字符处理,而非指令代码。
正确做法(预处理语句):
string sql = @"INSERT INTO emlog_article(title, content) VALUES (@Title, @Content)";
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 添加参数化处理,自动转义特殊字符
cmd.Parameters.AddWithValue("@Title", title);
cmd.Parameters.AddWithValue("@Content", content);
int rows = cmd.ExecuteNonQuery();
Console.WriteLine($"成功插入 {rows} 条数据");
}
}
看,这段代码不仅安全,而且性能更好。在做在线工具开发时,这种写法能规避掉90%的数据安全隐患。
四、 接口开发与前端数据交互
后端数据入库后,我们需要通过接口供前端调用。在C#中,利用ASP.NET Core Web API开发接口非常方便。返回的数据格式通常是JSON/XML。
后端返回JSON:
[HttpGet("api/get-data")]
public IActionResult GetData()
{
var data = new { id = 1, title = "测试文章", date = DateTime.Now };
return Ok(data); // 自动序列化为JSON
}
前端JS调用:
fetch('/api/get-data')
.then(response => response.json())
.then(data => {
console.log(data);
// 这里可以操作DOM,更新HTML/CSS页面显示
});
五、 总结与进阶思考
通过上面的步骤,我们完成了一个从爬虫开发到数据库存储再到接口展示的完整闭环。在开发过程中,你会发现MySQL数据库的索引优化、正则表达式的编写技巧,以及C#的多线程处理,都会影响最终的执行效率。
如果你在做EMLOG二次开发或者自己的博客系统,切记不要在数据库连接字符串中硬编码密码,也不要在代码里忽略异常处理。希望这篇实操教程能帮大家少走弯路。如果有更深层的技术问题,欢迎在零点博客评论区留言讨论!



评论一下吧
取消回复