Web crawler 如何在c#(Azure功能)中下载整个网站

Web crawler 如何在c#(Azure功能)中下载整个网站,web-crawler,httpwebrequest,azure-functions,Web Crawler,Httpwebrequest,Azure Functions,我正在开发一个爬虫,我需要保存一些证据,证明爬虫成功了 我正在寻找一种方法来下载发送URL的所有HTML、CSS和JS,并创建与目标站点相同的文件夹结构 我将不得不使用Azure函数来执行爬虫程序 其想法是废弃一个网站,下载内容并保存在Azure Blob中 我找到了它,但它只显示了如何下载HTML,我需要创建与爬虫看到的完全相同的东西(带有图像、CSS和处理过的JS) 我相信所有的绝对路径都会起作用,真正的问题是我将创建文件夹来保存文件的相对路径 有人能帮我吗?嗯,我相信这个答案对那些和我经历

我正在开发一个爬虫,我需要保存一些证据,证明爬虫成功了

我正在寻找一种方法来下载发送URL的所有HTML、CSS和JS,并创建与目标站点相同的文件夹结构

我将不得不使用Azure函数来执行爬虫程序

其想法是废弃一个网站,下载内容并保存在Azure Blob中

我找到了它,但它只显示了如何下载HTML,我需要创建与爬虫看到的完全相同的东西(带有图像、CSS和处理过的JS)

我相信所有的绝对路径都会起作用,真正的问题是我将创建文件夹来保存文件的相对路径


有人能帮我吗?

嗯,我相信这个答案对那些和我经历过同样事情的人会有帮助

我的解决方案是下载HTML(使用HttpWebRequest)并写入文件(存储在Azure Blob中)

在我的例子中,我创建了一个函数来更正HTML文件中的所有相关路径,如下所示:

private static HtmlDocument CorrectHTMLReferencies(string urlRoot, string htmlContent)
{
    HtmlDocument document = new HtmlDocument();
    document.LoadHtml(htmlContent);
    Regex rx = new Regex(@"([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?");
    var nodesIMG = document.DocumentNode.SelectNodes("//img");
    var nodesCSS = document.DocumentNode.SelectNodes("//link");
    var nodesJS = document.DocumentNode.SelectNodes("//script");
    string protocol = "http:";
    if (urlRoot.Contains(":"))
        protocol = urlRoot.Split(':')[0] + ":";
    void WatchURl(HtmlNodeCollection colNodes, string attr)
    {
        foreach (HtmlNode node in colNodes)
        {
            if (node.Attributes.Any(a => a.Name?.ToLower() == attr.ToLower()))
            {
                string link = node.Attributes[attr].Value;
                if (rx.IsMatch(link))
                {
                    if (link.Substring(0, 2) == "//")
                    {
                        string novaUrl = protocol + link;
                        node.SetAttributeValue(attr, novaUrl);
                    }
                }
                else
                {
                    node.SetAttributeValue(attr, urlRoot + link);
                }
            }
        }
    }
    WatchURl(nodesIMG, "src");
    WatchURl(nodesCSS, "href");
    WatchURl(nodesJS, "src");
    return document;
}
我没有下载所有的网站,而是只下载了一个文件。 它(对我)有效 ;)