哈喽大家好,我是专注于技术实战的博主。最近在做EMLOG和零点博客的二次开发时,经常需要从第三方API聚合数据。为了提高效率,我决定手写一个C#爬虫开发工具,自动抓取JSON数据并清洗入库。
很多新手在写爬虫时,只顾着去抓取HTML或JSON,却忽略了接口开发的安全性和SQL注入防护。今天我将以一个“新闻聚合助手”为例,为大家拆解这套从请求到数据库存储的完整链路。
一、 技术栈与项目架构
这次实战主要涉及后端逻辑与简单的数据处理,技术选型如下:
- 后端开发: C# (WinForms/Web API均可) + .NET Framework/Core
- 数据解析: Newtonsoft.Json (处理JSON/XML)
- 数据库: MySQL (用于EMLOG/零点博客数据写入)
- 数据校验: 正则表达式
二、 核心代码实战:Http请求与解析
首先,我们需要模拟浏览器请求,防止被对方的反爬虫机制拦截。这里使用HttpClient。
// 模拟User-Agent,这是防止被拦截的第一步
var handler = new HttpClientHandler() { UseCookies = false };
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...");
client.DefaultRequestHeaders.Add("Accept", "application/json");
string apiUrl = "https://api.example.com/news";
HttpResponseMessage response = await client.GetAsync(apiUrl);
if (response.IsSuccessStatusCode)
{
string jsonStr = await response.Content.ReadAsStringAsync();
// 使用Json.NET解析
var newsData = JsonConvert.DeserializeObject<RootObject>(jsonStr);
// 拿到数据后,下一步就是入库
await SaveToDatabase(newsData);
}
三、 底层拆解:MySQL存储与SQL注入防护
拿到JSON数据后,核心难点在于如何优雅地写入数据库。很多初学者喜欢直接拼接SQL字符串,这会导致严重的SQL注入防护漏洞。
我推荐使用预处理语句。这是C#操作MySQL(如MySql.Data)的标准方式。
string sql = "INSERT INTO emlog_post (title, gid, content, date) VALUES (@Title, @Gid, @Content, @Date)";
using (MySqlConnection conn = new MySqlConnection(connString))
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 参数化查询,彻底杜绝SQL注入
cmd.Parameters.AddWithValue("@Title", CleanContent(item.title));
cmd.Parameters.AddWithValue("@Gid", item.id);
// 如果内容包含HTML标签,可以用正则清洗一下
string cleanContent = Regex.Replace(item.content, @"<.*?>", "", RegexOptions.None);
cmd.Parameters.AddWithValue("@Content", cleanContent);
cmd.Parameters.AddWithValue("@Date", DateTime.Now);
await conn.OpenAsync();
await cmd.ExecuteNonQueryAsync();
}
四、 前端交互与避坑指南
为了让这个工具更实用,我用HTML/CSS/JS写了一个简单的控制面板。
避坑指南:
- Headers的重要性: 很多接口必须带上 Referer 和 Token 才能访问,否则返回403。
- 异常捕获: 网络请求是不可控的,一定要有try-catch包裹,避免程序崩掉。
- 正则匹配: 在提取特定格式数据时,正则表达式的回溯率要控制好,否则可能导致程序卡死。
这套代码已经集成到我个人的零点博客二次开发插件中,不仅实现了数据自动同步,还完美规避了数据库安全隐患。大家如果有类似的EMLOG插件需求,欢迎在评论区交流!



评论一下吧
取消回复