C#编程实战:手把手开发自定义爬虫采集EMLOG源码,附SQL注入与正则避坑指南
前两天我在整理零点博客的素材时,发现手动下载EMLOG主题源码太累了,而且很多优秀的后台管理系统封装得很好。作为一个C#编程爱好者,与其去求别人写接口,不如自己撸一个爬虫开发工具。今天就把这次从0到1开发在线工具的全过程复盘一下,顺便聊聊MySQL数据库操作和SQL注入防护这些必须要懂的干货。
一、 项目背景与技术栈选型
这次的需求很简单:抓取某开源站点上关于EMLOG和C#相关的主题包,解析其中的配置文件,提取核心代码并存入本地数据库。
- 后端语言: C# (ASP.NET Core)
- 前端交互: HTML/CSS/JS (原生开发,减少依赖)
- 数据存储: MySQL (5.7+)
- 工具库: Newtonsoft.Json (JSON解析), HtmlAgilityPack (HTML解析)
二、 爬虫核心逻辑与HTML解析
写爬虫第一步是发送请求。大家注意,现在很多网站都有反爬,我们可以模拟浏览器头部,或者增加下载延迟。拿到响应后,我们需要解析HTML。
直接使用正则表达式处理HTML有时会因为标签变化而失效,所以我推荐使用HtmlAgilityPack。不过为了保持代码轻量,在处理纯文本数据(如标题、描述)时,用正则表达式往往更直观。下面是一个提取H3标签标题的示例:
string html = "...";
// 提取标题的正则,避免匹配到导航栏里的文字
Regex regex = new Regex(@"<h3[^>]*>(?<title>[^<]+)</h3>", RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches(html);
foreach (Match match in matches)
{
string title = match.Groups["title"].Value.Trim();
Console.WriteLine($"采集到主题:{title}");
}
三、 接口开发与JSON数据交互
采集到的数据通常是结构化的,我们需要将其转换为JSON/XML数据解析格式。这里我们开发一个简单的API接口,把采集到的主题信息以JSON格式返回给前端。
[ApiController]
[Route("api/[controller]")]
public class ThemeController : ControllerBase
{
[HttpGet("list")]
public IActionResult GetThemes()
{
var themes = new List<ThemeModel>();
// 模拟从数据库查询数据
// ... 数据库查询逻辑 ...
return Ok(themes);
}
}
四、 数据库操作与SQL注入防护(重点!)
在存入MySQL时,SQL注入防护是绝对不能妥协的红线。很多新手喜欢字符串拼接SQL,比如:string sql = "insert into themes values('" + name + "')";,这是非常危险的。
正确的做法是使用预处理语句(Parameterized Queries)。这样数据库引擎会把你的输入当作纯文本处理,而不是SQL命令。
string sql = "INSERT INTO theme_list (name, author, version) VALUES (@Name, @Author, @Version)";
using (var cmd = new MySqlCommand(sql, conn))
{
// 关键点:使用参数化查询,完全杜绝SQL注入风险
cmd.Parameters.AddWithValue("@Name", themeName);
cmd.Parameters.AddWithValue("@Author", authorName);
cmd.Parameters.AddWithValue("@Version", version);
cmd.ExecuteNonQuery();
}
五、 底层避坑与开发总结
在这次开发过程中,我踩了不少坑,这里给新手的建议:
- 并发问题: 如果爬虫抓取频率太快,会被对方服务器封IP。建议在代码里加上随机延时,模拟人类操作。
- 字符编码: 前端展示乱码多半是因为HTML/CSS没有设置正确的 charset,或者后端数据库连接字符串没带 `charset=utf8mb4`。
- 代码复用: 尽量封装好公共的数据库操作类,避免到处写连接字符串。
通过这次实操,我深刻体会到C#编程在处理企业级应用时的严谨性。无论是后端的接口开发,还是前端的UI交互,只有底层逻辑扎实,才能开发出好用的在线工具。
如果你也在学习编程,欢迎关注零点博客,我会定期分享更多关于C#、PHP后端以及爬虫开发的源码案例!



评论一下吧
取消回复