技术笔记:从零开发C#爬虫提取EMLOG数据并安全入库
大家好,我是博主。最近在零点博客折腾后台开发,为了整理历史文章,决定自己写个简单的C#爬虫来解析 EMLOG 的源码并入库。这不是为了偷懒,而是为了搞懂底层逻辑。在这个过程中,我发现很多初学者忽略了接口开发中的安全细节,特别是SQL注入防护。今天就把这次实操的技术笔记复盘一下,代码都是现成可用的。
一、 目标:解析EMLOG与数据清洗
我们要做的很简单:抓取一个 EMLOG 站点的列表页,提取标题、摘要和发布时间,然后存到我们自己的MySQL数据库里。这就涉及到HTML/CSS/JS前端开发中常见的“爬取”逻辑,只不过这里我们用 C# 来写后端。
二、 核心流程:HttpClient + 正则表达式
首先,我们通过 HttpClient 发起请求。拿到 HTML 源码后,硬解析太痛苦了,所以利用正则表达式是最高效的方案。
1. 获取源码
using System.Net.Http;
using System.Threading.Tasks;
// 模拟一个简单的客户端
using var client = new HttpClient();
var response = await client.GetStringAsync("http://example.com/?action=article_list");
// response 即为获取到的HTML字符串
2. 正则提取数据
EMLOG 的文章标题通常在 <h3> 标签里。我们需要构造正则来精准匹配。
string pattern = @"<h3>(.+?)</h3>";
MatchCollection matches = Regex.Matches(response, pattern);
foreach (Match match in matches)
{
string title = match.Groups[1].Value; // 提取标题
Console.WriteLine($"获取标题: {title}");
}
三、 安全与存储:避开SQL注入大坑
拿到数据后,直接拼 SQL 是大忌!这是我做接口开发时必须强调的一点。无论数据是来自用户输入还是爬虫抓取,都必须经过严格过滤。
1. 使用预处理语句
在连接MySQL数据库时,一定要使用参数化查询,千万不要手动拼接字符串。下面是结合我们提取的数据进行安全入库的代码:
using (MySqlConnection conn = new MySqlConnection("Server=localhost;Database=testdb;User=root;Password=xxx;"))
{
conn.Open();
string sql = "INSERT INTO articles (title, content) VALUES (@title, @content)";
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 核心点:使用 @参数 占位,数据库自动转义,杜绝SQL注入
cmd.Parameters.AddWithValue("@title", title);
cmd.Parameters.AddWithValue("@content", summary);
cmd.ExecuteNonQuery();
}
}
四、 避坑指南与总结
- 爬虫封禁问题: EMLOG 如果开启了防爬,建议在代码中加入随机的
User-Agent模拟浏览器,或者稍微控制一下请求频率。 - JSON解析: 如果接口返回的是 JSON/XML 格式,可以用 Newtonsoft.Json 库直接反序列化,比正则更稳健。
- 零点博客开发心得: 很多时候,后台开发不仅仅是写接口,更是关于安全意识。本文的 技术笔记 仅仅是个开始,真正复杂的系统还需要涉及微服务架构。
希望这篇关于 C# 爬虫与 MySQL 入库的实操教程能帮到大家。如果有源码需求,欢迎在零点博客留言!



评论一下吧
取消回复