下载mxr.mozilla.org上的代码
mxr.mozilla.org是mozilla的代码查看网站,上面有丰富的代码资源,但是上边没有打包下载的功能,只能单个单个文件的下载,用起来会非常的麻烦。
今天没啥事,想研究一下firefox的编码识别模块,需要到mxr.mozilla.org上去下载代码。去网上找了一圈也没有找到批量下载的方法或工具。
本想一个一个文件下载,但是发现文件数量还是比较大的,很麻烦,所以决定写个工具来下载。
工具用C#写成,用到了SqmlReader来解析html代码。
用法也很简单,usage mxr.mozilla.org_downloader <url> <donwload path>
代码如下,写得比较戳,没有太多的考虑效率问题:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Xml.Linq;
namespace mxr.mozilla.org_downloader
{
class Program
{
static void Main(string[] args)
{
if (args.Length < 2)
{
Console.Error.WriteLine("usage mxr.mozilla.org_downloader ");
return;
}
Download(args[0], args[1]);
}
static void Download(string url, string destDir)
{
// 创建目录
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
if (!url.EndsWith("/"))
{
DownloadFile(url, destDir);
}
else
{
DownloadDir(url, destDir + "\" + url.Substring(url.LastIndexOf('/', url.Length - 2) + 1));
}
}
static void DownloadFile(string url, string destDir)
{
using (WebClient wc = new WebClient())
{
if (url.Contains('?'))
{
url = url.Substring(0, url.IndexOf('?'));
}
wc.DownloadFile(url + "?raw=1", destDir + "\" + url.Substring(url.LastIndexOf('/') + 1));
}
}
static void DownloadDir(string url, string destDir)
{
// 解析网页
using (WebClient wc = new WebClient())
{
string html = Encoding.UTF8.GetString(wc.DownloadData(url));
SgmlDomBuilder sb = new SgmlDomBuilder();
XDocument doc = sb.BuildDocument(html);
var maintb = doc.GetElementById("source").NextNode.NextNode as XElement;
var trs = from q in maintb.GetElementsByTagName("tr") where q.GetAttributeValue("valign", "none") == "top" select q;
foreach (var tr in trs)
{
var td = tr.FirstNode.NextNode as XElement;
var a = td.Elements().First();
if (a.GetInnerHtml() != "Parent directory")
{
string href = a.GetAttributeValue("href", null);
if (href != null)
{
Download("http://mxr.mozilla.org" + href, destDir);
}
}
}
}
}
}
}
源代码:mxr.mozilla.org downloader_src
程序:mxr.mozilla.org downloader

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?