-2

我正在尝试使用 python 浏览一个网站,该网站在其登陆页面上有身份验证表单,由 ASP 脚本呈现。

但是,当我使用 python(使用 mechanize、requests 或 urlibs)来获取该站点的 HTML 时,由于此类 ASP 脚本,我总是得到一个半空白的 HTML 文件。

有谁知道我可以使用什么方法来获得 ASP 站点的最终(显示在浏览器上)版本?

4

1 回答 1

2

您的目标页面frameset. 我可以告诉服务器端没有什么花哨的事情。当我使用requestsurllib下载它时,即使根本不发送任何标题,我也会得到与在 Chrome 或 Firefox 中看到的完全相同的 HTML。有一些嵌入式 JS,但它什么也没做。基本上,这里只有frameset一个单曲frame

frame目标也是一个完全正常的页面,我可以告诉服务器端没有任何花哨的事情发生。同样,如果我在没有标题的情况下获取它,我会得到与 Chrome 或 Firefox 中完全相同的内容。这里有很多嵌入式 JS,但它不是从头开始构建 DOM 或其他任何东西;我从服务器获得的静态内容包含整个页面内容。我可以把所有的 JS 都去掉,然后渲染出来,看起来一模一样。

有一个小问题,服务器和 HTML 都没有在任何地方指定字符集,但内容不是 ASCII,这意味着如果要将其处理为 Unicode,则需要猜测要解码的字符集。但是,如果您在 Python 2.x 中,并且只是打算通过 ID 或其他方式从 DOM 中获取内容,那就没关系了。

我怀疑你真正的问题是你不知道 HTML是如何frameset工作的。您正在下载frameset,而不是下载引用的frame,并且想知道为什么结果页面看起来像一个空的frameset

框架是一个过时的功能,除了让用户在古老的浏览器中弹出一个新窗口的常见技巧,以及一些用于欺骗弹出窗口阻止程序的晦涩技巧之外,没有人再使用它了。在 HTML 5 中,它们终于消失了。但是只要古老的网站存在并且需要被抓取,你就需要知道它们是如何工作的。

这不是完整文档的替代品,但这是 Web 浏览器对 a 所做的简短版本frameset:对于每个frame标签,它遵循属性,然后将标签src的内容替换为没有属性的标签,使用读取URL 作为其内容的结果。除此之外,当然,框架会影响布局,但这可能不会影响您。frame#documentsrc

同时,如果你想学习网络抓取,你真的想安装浏览器的“Web 开发工具”(不同的浏览器有不同的名称),或者像 Firebug 这样的完整调试器。这样,您可以检查浏览器正在呈现的实时树,并将其与您从脚本(或更简单地说,从wget)中获得的内容进行比较。因此,下次您可以说“在 Chrome 的检查页面中,我在 下方看到一个#documentframe下方有一大堆东西,但是当我自己尝试阅读同一页面时,frame没有孩子”。

于 2012-11-13T00:55:23.647 回答