如何使用python获取呈现的ASP页面?

如何使用python获取呈现的ASP页面?,python,asp-classic,Python,Asp Classic,我正在尝试使用python浏览一个网站,该网站的登录页上有由ASP脚本呈现的auth表单 但是,当我使用python(带有mechanize、requests或urlibs)来获取该站点的HTML时,由于使用了这样的ASP脚本,我总是得到一个半空白的HTML文件 有谁知道我可以使用什么方法来获取ASP站点的最终版本(如浏览器上显示的那样)?是一个框架集。从服务器端我看不出有什么奇怪的事情发生。当我使用requests或urllib下载它时,甚至根本不发送任何标题,我得到的HTML与在Chrome

我正在尝试使用python浏览一个网站,该网站的登录页上有由ASP脚本呈现的auth表单

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

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

是一个
框架集。从服务器端我看不出有什么奇怪的事情发生。当我使用
requests
urllib
下载它时,甚至根本不发送任何标题,我得到的HTML与在Chrome或Firefox中看到的完全相同。有一些嵌入式JS,但它什么都不做。基本上,这里只有一个
框架集
,其中只有一个
框架

目标也是一个完全正常的页面,从服务器端看不出有什么奇怪的事情发生。同样,如果我获取它时没有标题,我得到的内容与Chrome或Firefox中的内容完全相同。这里有很多嵌入式JS,但它不是从头开始构建DOM或其他东西;我从服务器获取的静态内容包含整个页面内容。我可以去掉所有的JS并渲染它,它看起来完全一样

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

我怀疑您真正的问题在于您不知道HTML
frameset
s是如何工作的。您正在下载
框架集
,而没有下载引用的
框架
,并且想知道为什么生成的页面看起来像一个空的
框架集

框架是一个过时的功能,除了让用户弹出一个新窗口(即使在古代浏览器中)的常见技巧,以及一些愚弄弹出阻止程序的晦涩技巧之外,没有人再使用它。在HTML5中,它们终于消失了。但只要古代网站还在,需要清理,你就需要知道它们是如何工作的

这不是对完整文档的替代,但这是web浏览器使用
框架集
的一个简短版本:对于每个
框架
标记,它遵循
src
属性,然后用不带属性的
文档
标记替换
框架
标记的内容,将读取
src
URL的结果作为其内容。当然,除此之外,框架还会影响布局,但这可能不会影响您


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

是否使用JavaScript修改/加载内容?您是否尝试过更高级别的浏览器仿真器(如Selenium)?如果确实是ASP脚本拒绝为您提供内容,因为您来自Python而不是浏览器,那么只需更改HTTP头(很可能是用户代理头),因为他们几乎没有其他方法可以区分你的脚本和Firefox。但是,很可能您对这个问题的看法是错误的,ASP提供的是HTML和JS的完全相同的组合,而问题(正如@Blender所说)是额外的HTML是由JS生成的。@Blender不,在这种情况下,它只是ASP。@sr2222刚刚尝试了Selenium,但得到了相同的结果。它没有呈现我正在寻找的字段。谢谢,我真的不知道框架集的存在。我会研究它们,看看是否能帮上忙。@tilacog:用一些信息编辑了答案,让您开始学习。在阅读了您的新答案后,我用Python访问了我的目标页面。非常感谢您对框架集的精彩解释!