抓取当前请求并将其压缩

时间:2009-07-21 13:22:16

标签: asp.net zip screen-scraping

我有一个asp.net网站,其中包含几个页面,我想将其生成的内容导出并发送到另一个服务进行存档。

我能理解的最好的方法是抓住流并将其转储到一个容易做到的文件中。我的主要挑战是遵循外部资源并将其包含在zip文件中。我想在样式表中包含样式表和图像以及图像。我在请求时需要流,因为生成的流依赖于当前会话等。

我也想知道是否所有这些位置都应该规范化,换句话说,将主文档所在的引用重新路由到同一目录。

我可以保证所有外部资源都位于同一台服务器上。

这可以用HtmlAgilityPack完成吗?看起来我可以用这个实用程序做很多手动工作,但是我能用它来查看样式表中引用的查询图像吗?

尝试在完成其他任务时对此主题进行一些发现。

感谢。

3 个答案:

答案 0 :(得分:0)

如果您的目标是记录用户在浏览器中看到的内容而不是浏览器的实际标记,我可以提出您可能会考虑的方法。

System.Windows.Forms.WebBrowser类旨在允许在Windows窗体中嵌入浏览器。一旦控件呈现页面,您就可以使用DrawToBitmap()方法将其提取为位图。

如果您要将页面响应存储在存档中,您还必须担心存在的每个外部引用资源(图像,css文件等)的版本制作页面存档时的时间。啊。

也许你可以用Windows服务创建的不可见形式实现WebBrowser?然后,您只需将要存档的每个页面的URL排队到此服务,该服务将呈现页面并将位图添加到您的存档。

答案 1 :(得分:0)

最简单的方法是使用外部应用程序来抓取您的网站并将所有网页转换为平面HTML文件。它不仅会跟随链接,还会抓取所有图像/ css / javascript文件,并将对它们的任何引用更改为文档相对。这意味着您将拥有一个可在本地浏览的html / css / js文件夹。我使用的应用程序称为HTTrack - http://www.httrack.com/。我发现它的效果非常好。

答案 2 :(得分:0)

如果你想看看我是怎么做的,我检查了我的source at GitHub

我的解决方案并不完美,但它适用于我需要它做的事情。可能出现的一些问题在规范化脚本中。 HtmlAgility Pack不会发出XHTML,只发布HTML,所以我只是用它来查找我要替换的src和href元素,然后我用我的规范化<替换了原始源中找到的值/ em> paths。

此外,我遇到了zip存档的错误,但我不太确定该问题是什么。如果有人想要添加一些改进,请告诉我。

由于