C#爬虫开发实战:手把手解析JSON/XML数据并安全存入MySQL(附避坑指南)
大家好,我是零点博客的主理人。今天不聊虚的,直接上干货。在做C#后端开发以及EMLOG主题二次开发时,我们经常需要从第三方接口获取数据。这时爬虫开发就成了刚需。很多新手只关注怎么抓取数据,却忽略了SQL注入防护,这是绝对不能容忍的低级错误。
本文将通过一个真实的案例,手把手教你如何用C#封装一个轻量级爬虫,处理JSON/XML数据解析,并利用MySQL数据库存储。代码在文末,直接复制就能跑。
一、 环境准备与HttpClient封装
首先,我们需要发送HTTP请求。不要自己造轮子,使用.NET Core自带的HttpClient即可。为了保证接口的稳定性,我们需要处理异步请求和超时重试机制。
using System.Net.Http;
using System.Threading.Tasks;
public class HttpHelper
{
private static readonly HttpClient client = new HttpClient();
public static async Task<string> GetStringAsync(string url)
{
return await client.GetStringAsync(url);
}
}
这段代码是爬虫的基石。对于API返回的数据,我们通常处理JSON格式,但如果接口不规范,偶尔也会遇到XML格式。
二、 JSON/XML数据解析技巧
拿到字符串数据后,我们需要解析。推荐使用Newtonsoft.Json库,解析速度非常快。以抓取某网站文章列表为例:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public List<Article> ParseJsonData(string jsonStr)
{
var obj = JObject.Parse(jsonStr);
var list = new List<Article>();
// 循环遍历数组节点
foreach (var item in obj["data"])
{
list.Add(new Article
{
Title = item["title"].ToString(),
Url = item["link"].ToString(),
PubTime = DateTime.Parse(item["date"].ToString())
});
}
return list;
}
解析完成数据后,下一步就是如何把这些数据存入我们的MySQL数据库。这里要特别强调一点:绝对不要使用字符串拼接SQL!
三、 SQL注入防护与预处理语句(核心避坑指南)
这是我经常在群里强调的。很多小白直接写 INSERT INTO table VALUES(''+input+'),一旦输入恶意脚本,数据库就挂了。我们必须要用预处理语句。
使用C#连接MySQL,推荐MySql.Data或Dapper。这里演示使用原生参数化查询:
using MySql.Data.MySqlClient;
using System.Data;
public void SaveData(List<Article> articles)
{
string sql = "INSERT INTO articles (title, url, pub_time) VALUES (@title, @url, @pubTime)";
using (var conn = new MySqlConnection("Server=localhost;Database=test;User=root;Password=123;"))
{
conn.Open();
using (var cmd = new MySqlCommand(sql, conn))
{
// 明确指定参数类型,防止注入
cmd.Parameters.Add("@title", MySqlDbType.VarChar).Value = article.Title;
cmd.Parameters.Add("@url", MySqlDbType.VarChar).Value = article.Url;
cmd.Parameters.Add("@pubTime", MySqlDbType.DateTime).Value = article.PubTime;
cmd.ExecuteNonQuery();
}
}
}
看,参数加上了 @ 符号,这就是预处理语句的魔法,能彻底隔绝SQL注入风险。
四、 爬虫开发的进阶与常见问题
在爬虫开发过程中,你可能还会遇到以下坑:
- IP被封: 容易触发目标站点的反爬虫机制。解决方案是封装一个简单的代理池,或者在请求头中伪装成浏览器(User-Agent)。
- 编码乱码: 确保在请求后正确设置编码,通常默认UTF-8。
这套逻辑不仅能用于简单的工具开发,也能复用到我们的零点博客功能扩展中,比如自动同步第三方RSS数据到本地。希望这个实战案例能帮到大家。
更多关于HTML/CSS/JS前端与后端交互的案例,欢迎持续关注零点博客的更新!



评论一下吧
取消回复