零点博客复盘:基于 C# 爬虫开发的 MySQL 数据获取与防注入实战
最近在维护零点博客后台时,为了方便整理资源,我决定用 C# 实现一个轻量级的 爬虫开发 工具。这不仅仅是简单的抓取,更重要的是如何保证数据库写入时的 SQL注入防护。今天就把这次实操的底层逻辑和踩过的坑分享给大家。
一、 技术栈与底层架构设计
这次的需求很简单:模拟浏览器请求目标网页,提取 HTML 中的关键信息,然后存入 MySQL。我的技术选型非常经典: C# 后端负责逻辑处理,HTML/CSS/JS 也就是网页的结构解析,配合 正则表达式 进行精准匹配。
核心代码:使用 HttpClient 获取数据
public async Task<string> GetHtmlContentAsync(string url)
{
using (var httpClient = new HttpClient())
{
// 模拟 User-Agent,防止被简单的反爬虫机制拦截
httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; ZeroBlog/1.0; +https://zdlblog.com)" );
var response = await httpClient.GetStringAsync(url);
return response;
}
}
在拿到 HTML 源码后,这才是 爬虫开发 中最考验功力的一步——如何从杂乱的标签中提取数据。
二、 数据提取:正则表达式的艺术
虽然有很多 HTML 解析库,但正则表达式依然是我最常用的方式,因为它对于特定的数据模式非常高效。
public string ExtractContent(string html)
{
// 示例正则:匹配 <div class="title">文本内容</div>
var pattern = @"class="title">(.*?)</div>";
var match = Regex.Match(html, pattern);
return match.Groups[1].Value;
}
在实际操作中,你可能会发现网页结构微调,正则就要跟着变。这也是为什么我在写 爬虫开发 代码时,习惯将提取逻辑封装成函数,方便调试。
三、 数据安全:MySQL 与预处理语句
很多新手容易忽视的一步就是 SQL注入防护。如果我们直接拼接字符串,比如 $"INSERT INTO logs VALUES ('{content}')",一旦输入的内容里包含单引号,数据库直接崩盘。
我在零点博客的这套工具里,强制使用了 预处理语句。无论抓取的数据多么复杂,都通过参数绑定的方式传给 MySQL。
public void SaveToDatabase(string content)
{
string sql = "INSERT INTO crawler_logs (data_content, created_at) VALUES (@Content, @Time)";
using (var cmd = new MySqlCommand(sql, connection))
{
cmd.Parameters.AddWithValue("@Content", content);
cmd.Parameters.AddWithValue("@Time", DateTime.Now);
cmd.ExecuteNonQuery();
}
}
四、 总结与避坑指南
经过这次开发,我发现做一个稳定且合规的 爬虫开发 项目,重点不在于写代码,而在于流程的严谨性:
- 请求头伪装:务必带上 User-Agent,避免被当成脚本封禁 IP。
- 异常捕获:网络波动、目标网站 404 都要处理,保证程序不崩溃。
- 数据清洗:抓取下来的数据往往带有很多多余空格或标签,记得用 正则表达式 或 Linq 清洗一遍。
希望这篇文章能帮到正在学习 爬虫开发 的朋友们。如果你也有类似的 C# 或 EMLOG 二次开发经验,欢迎在零点博客留言交流!



评论一下吧
取消回复