<!DOCTYPE html>
零点博客实战:C#实现EMLOG数据爬虫与后端接口开发全解
最近在维护零点博客,为了给移动端提供更高效的数据支持,我打算写一套独立的接口服务。这事儿折腾了两天,踩了不少坑,今天把后端接口开发实战中关于爬虫、MySQL操作以及安全防护的干货全部复盘出来,希望能帮到大家。
为什么选择C#做爬虫和接口?
很多人问,EMLOG是PHP写的,直接用PHP写接口不好吗?我试过,PHP处理高并发和正则匹配大段HTML时确实有点吃力。这次我决定用C# .NET作为后端主力,配合MySQL做数据库存储。C#在处理并发请求、JSON解析以及正则表达式匹配上优势明显,是进行后端接口开发实战的不二之选。
第一步:网络请求与HTML解析
我们的目标是抓取目标站点的文章列表。这里需要用到HttpClient。
using (HttpClient client = new HttpClient())
{
// 模拟浏览器请求头,防止被反爬
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 ...");
// 发送GET请求
string html = await client.GetStringAsync("https://example.com/list.html");
// 这里我们可以结合正则表达式提取关键信息
// 正则示例:匹配文章标题
var match = Regex.Match(html, @"<h3 class="title">(.+?)</h3>", RegexOptions.IgnoreCase);
if (match.Success)
{
string title = match.Groups[1].Value;
Console.WriteLine("抓取到标题: " + title);
}
}
这里用到正则表达式来精准定位HTML中的内容。在实战中,大家一定要注意HTML结构的变化,否则正则就会失效。
第二步:对接MySQL与SQL注入防护
数据抓下来之后,得存到零点博客的MySQL数据库里。这是最容易被忽视的环节。SQL注入是老生常谈但又是必坑点。如果你直接拼接SQL字符串,黑客随便输入个 `1' OR '1'='1` 就能炸库。
正确做法是使用预处理语句(Parameterized Queries):
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
string sql = "INSERT INTO emlog_articles (title, content, post_time) VALUES (@title, @content, @time)";
MySqlCommand cmd = new MySqlCommand(sql, conn);
// 关键!使用参数化查询,完全隔绝SQL注入风险
cmd.Parameters.AddWithValue("@title", title);
cmd.Parameters.AddWithValue("@content", htmlContent);
cmd.Parameters.AddWithValue("@time", DateTime.Now);
conn.Open();
cmd.ExecuteNonQuery();
}
第三步:JSON数据解析与接口封装
最后,我们需要把数据转换成JSON格式,供前端调用。C#的 Newtonsoft.Json 库非常强大,一行代码搞定:
var result = new
{
code = 200,
message = "success",
data = new[]
{
new { id = 1, title = title, url = "https://zidian.blog/article/1" }
}
};
// 将对象转换为JSON字符串
string jsonOutput = JsonConvert.SerializeObject(result, Formatting.Indented);
// 返回给前端
return Content(jsonOutput, "application/json");
避坑指南与总结
- 乱码问题:抓取网页时经常遇到UTF-8和GBK混杂的情况,务必统一用UTF-8解析,或者在Header里显式指定。
- 超时设置:网络请求如果不设置超时,目标站挂了你的接口也会一直转圈,建议设置 30s 超时。
- 代码复用:不要把所有逻辑都写在一个文件里,推荐把爬虫、数据库操作和API控制器拆分开,方便维护。
这次的后端接口开发实战虽然看似简单,但把爬虫开发、正则匹配、SQL注入防护以及JSON处理串联起来,才能真正理解一个接口系统的底层逻辑。源码我已经整理好,直接开源到了零点博客,大家拿去改造就行!



评论一下吧
取消回复