C#爬虫实战:绕过反抓取抓取EMLOG数据并实现安全的JSON入库

大家好,我是零点。前两天有个朋友问我,既然自己是C#后端开发,能不能帮他写个脚本,把旧站EMLOG的文章迁移到新系统里?我说没问题,比起PHP,用C#写爬虫处理并发和数据清洗要顺手得多。

这次实战,我不讲大道理,直接上干货。我们会涉及C# Web Scraping、接口开发、正则匹配、JSON解析以及最关键的SQL注入防护。

一、 场景与设计思路

EMLOG的静态页面里往往不包含最新文章列表,我们需要模拟浏览器去请求它的接口。为了保证在线工具的安全性和稳定性,我们必须处理好异步请求和异常捕获。

二、 核心代码实现:抓取与解析

首先,利用HttpClient来模拟GET请求。为了应对反爬,我加入了Header伪装和User-Agent。拿到数据后,直接使用Json.NET库进行解析,这是C#生态里处理JSON的神器。

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

public class EmlogCrawler
{
    private static readonly HttpClient client = new HttpClient();
    private static readonly string ApiUrl = "https://blog.zeropoint.com/api.php?action=get_articles_list";

    static EmlogCrawler()
    {
        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...");
    }

    public static async Task<List<Article>> FetchArticlesAsync()
    {
        var response = await client.GetStringAsync(ApiUrl);
        var json = JObject.Parse(response);
        // 这里省略了具体的JsonPath解析逻辑,根据实际接口调整
        return json["articles"].ToObject<List<Article>>();
    }
}

三、 防坑指南:正则匹配与数据清洗

有时候接口返回的数据结构很乱,或者包含HTML标签。这时候就需要正则表达式出场了。比如提取文章中的纯文本:

string rawHtml = "<p>Hello World</p>";
Regex regex = new Regex(@"<[^>]+>"); // 匹配所有HTML标签
string cleanText = regex.Replace(rawHtml, string.Empty).Trim();

这里要注意,正则表达式写多了很容易出Bug,建议大家多使用在线测试工具调试。

四、 终极安全:SQL注入防护与预处理语句

这是很多初学者容易忽略的。虽然我们是从接口抓取,但如果后续要把数据存回本地数据库,必须使用预处理语句。

错误示范: 直接拼接SQL,极易被黑客利用。

string sql = $"INSERT INTO articles (title) VALUES ('{title}')";
// 万一title里包含 '; DROP TABLE users; --,数据库就炸了!

零点推荐做法: 使用参数化查询。

string sql = "INSERT INTO articles (title) VALUES (@Title)";
using (MySqlCommand cmd = new MySqlCommand(sql, connection))
{
    cmd.Parameters.AddWithValue("@Title", title);
    cmd.ExecuteNonQuery();
}

五、 总结与复盘

整个开发流程下来,我最大的感触是:接口开发不仅仅是写个方法,更重要的是异常处理和安全性。C#的强类型特性在解析JSON时非常方便,能提前发现很多数据格式错误。

如果你也想开发类似的在线工具,建议用ASP.NET Core,配合C#的异步编程模型,性能会有质的飞跃。下次咱们聊聊如何在HTML/CSS中优雅地展示这些抓取来的数据。

相关标签: #C# #EMLOG #爬虫开发 #SQL注入防护 #MySQL