C#爬虫实战复盘:从接口抓取到数据清洗,防注入与正则处理的实战代码案例
大家好,我是零点博客的主理人。在最近开发零点博客相关的在线工具时,涉及到了大量的数据抓取与处理工作。今天想把这几次踩坑的经历拿出来,给大家分享一下干货。
需求背景与遇到的坑
我们需要从某个公共接口抓取数据,整理后存入MySQL。刚开始我直接拼接SQL语句,结果被朋友一顿批,直接引入了SQL注入风险。这就好比在代码案例里裸奔,太危险了。所以这次复盘,重点要讲的是:如何用C#后端安全地抓取数据,并用正则清洗,同时配合预处理语句防止注入。
1. 数据接口抓取与JSON解析
首先是后端开发。我们不使用现成的PHP框架,而是直接用原生C#处理HTTP请求,效率更高。这里展示一下如何获取JSON数据并解析。
// 这里是具体的C#代码案例
using System.Net.Http;
using System.Text.Json;
HttpClient client = new HttpClient();
var response = await client.GetStringAsync("https://api.example.com/data");
var data = JsonSerializer.Deserialize<RootObject>(response);
这部分是前奏,拿到数据后,你会发现HTML标签或者特殊符号混杂其中,直接存库会报错。这时候正则表达式就派上用场了。
2. 正则表达式清洗脏数据
在之前的EMLOG主题开发中,我们就经常用到正则来提取文章摘要。同样的思路,这里写个简单的正则匹配:
// 提取纯文本的简单正则
string pattern = @"<p>.*?</p>";
Regex rg = new Regex(pattern, RegexOptions.Compiled);
string cleanContent = rg.Match(rawHtml).Value;
处理完清洗工作,数据就干净了。接下来是重头戏:安全入库。
3. 防SQL注入与预处理语句详解
这是所有后端开发者必须死守的底线。很多人觉得写了C#/PHP后端开发,只要框架强就没事,其实底层原理没变。
如果不使用预处理,拼接SQL是这样的(错误示范):
string sql = "INSERT INTO posts (title, content) VALUES ('" + title + "', '" + content + "')";
如果title里有人故意输入 `1' OR '1'='1`,数据库就挂了。
正确的做法是参数化查询,也就是预处理语句。下面这个代码案例演示了C#如何连接MySQL并安全插入:
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
string sql = "INSERT INTO posts (title, content) VALUES (@Title, @Content);";
// 关键点:使用参数化
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@Title", title);
cmd.Parameters.AddWithValue("@Content", content);
int rows = cmd.ExecuteNonQuery();
}
}
看懂了吗?@Title和@Content只是占位符,无论输入什么特殊字符,数据库都会把它当做普通文本处理,彻底杜绝了SQL注入风险。
4. 前端展示与HTML/CSS/JS收尾
数据存好了,怎么展示?前端开发部分我们负责接收后端返回的JSON数据,并用HTML/CSS渲染成卡片。这里就不展开复杂的DOM操作了,重点是确保CSS布局响应式,适配手机和PC端。
写在最后
这次项目从接口开发到防注入处理,全流程走了一遍。如果你在做EMLOG插件开发或者类似的在线工具,一定要参考这个代码案例中的预处理写法。技术无捷径,安全第一。



评论一下吧
取消回复