C#编程实战:基于正则表达式的EMLOG爬虫数据清洗工具开发
大家好,我是零点博客的主理人。最近在整理数据时,发现手动复制粘贴不仅效率低下,还容易出错。于是,我就想着利用自己擅长的C#编程技能,搞一个轻量级的自动化工具来搞定它。
经过几天的折腾,这套结合了正则表达式与MySQL数据库操作的方案终于跑通了。今天就把这个底层拆解的过程和源码分享给大家,希望能帮大家避坑。
一、 需求背景与技术选型
我们的目标是从外部的一个新闻源网页抓取文章标题和摘要,然后存入我们的EMLOG博客数据库中。虽然PHP也有爬虫库,但我个人在处理复杂逻辑和接口开发时,还是更信赖C#的强大生态。
- 核心语言:C#
- 数据解析:正则表达式
- 数据存储:MySQL + 预处理语句
- 目标平台:模拟EMLOG数据写入
二、 代码实现:从获取接口到存入数据库
为了方便大家理解,这里提供一个精简版的逻辑核心。请注意看SQL部分是如何处理的。
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text.RegularExpressions;
using MySql.Data.MySqlClient;
namespace ZeroPointBlogTool
{
class Program
{
// 避免硬编码,实际项目中建议读取配置文件
static string connString = "Server=localhost;Database=emlog;User=root;Password=123456;CharSet=utf8mb4;";
static async Task Main(string[] args)
{
// 1. 模拟发送HTTP请求获取网页内容
using (HttpClient client = new HttpClient())
{
string html = await client.GetStringAsync("https://example.com/article-list");
// 2. 使用正则表达式提取标题和摘要
// 这里演示提取带有特定标签的内容
Regex regex = new Regex(@"([^<]+)
.*?([^<]+)
", RegexOptions.Compiled);
MatchCollection matches = regex.Matches(html);
List<Article> articles = new List<Article>();
foreach (Match match in matches)
{
articles.Add(new Article { Title = match.Groups[1].Value, Summary = match.Groups[2].Value });
}
// 3. 批量插入数据库
SaveToDatabase(articles);
}
}
static void SaveToDatabase(List<Article> articles)
{
using (MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
// 使用预处理语句防止SQL注入,这是C#编程安全开发的核心
string sql = "INSERT INTO emlog_article (title, content, date) VALUES (@title, @content, @date)";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@title", "");
cmd.Parameters.AddWithValue("@content", "");
cmd.Parameters.AddWithValue("@date", DateTime.Now);
// 开启事务,确保数据一致性
MySqlTransaction trans = conn.BeginTransaction();
cmd.Transaction = trans;
try
{
foreach (var item in articles)
{
cmd.Parameters["@title"].Value = item.Title;
cmd.Parameters["@content"].Value = item.Summary;
cmd.ExecuteNonQuery();
}
trans.Commit();
Console.WriteLine($"成功导入 {articles.Count} 篇文章至EMLOG数据库!");
}
catch (Exception ex)
{
trans.Rollback();
Console.WriteLine($"插入失败: {ex.Message}");
}
}
}
}
class Article
{
public string Title { get; set; }
public string Summary { get; set; }
}
}
三、 底层拆解与避坑指南
代码跑通了只是第一步,作为零点博客的技术复盘,我必须提醒大家几个开发中容易忽略的细节:
- 正则性能优化:在C#编程中,正则表达式`RegexOptions.Compiled`能显著提升匹配速度,如果你的数据量很大,记得加上这个选项。
- SQL注入防护:千万不要手动拼接SQL字符串(例如 `"INSERT INTO... VALUES ('" + title + "')"`)。上面的代码使用了`AddWithValue`和预处理语句,这是目前C#后端开发中防御SQL注入的标准做法。
- 字符编码:在处理中文网页时,一定要确保HttpClient的编码与数据库的字符集一致(utf8mb4),否则存入MySQL会出现乱码。
- EMLOG字段适配:上面的示例是一个通用写法,实际对接EMLOG时,你需要根据EMLOG的数据表结构调整字段名,比如`cid`、`title`、`content`等。
四、 总结
通过这个简单的C#工具,我们完成了从网页抓取、JSON/XML(这里演示了正则模拟)解析到MySQL存储的全流程。这种开发模式非常适合需要批量处理数据的场景。
如果你在接口开发或者后端开发过程中遇到类似问题,欢迎在零点博客留言交流。希望今天的分享对大家的C#编程之路有所帮助!



评论一下吧
取消回复