如何遵循的urllib重定向?(How to follow a redirect with urll

2019-09-27 04:42发布

我创建在Python 3一个脚本,访问一个页面,如:

example.com/daora/zz.asp?x=qqrzzt

使用urllib.request.urlopen(“example.com/daora/zz.asp?x=qqrzzt”),但是这个代码只是给我同样的页面(example.com/daora/zz.asp?x=qqrzzt)和在浏览器中,我得到一个重定向到一个页面,如:

example.com/egg.aspx

我能做什么来检索

example.com/egg.aspx

而不是

example.com/daora/zz.asp?x=qqrzzt

我认为这是相关的代码,这是来自“example.com/daora/zz.asp?x=qqrzzt”的代码:

<head>

<script language="JavaScript">

<!--
    function Submit()

    {
        document.formzz.submit();
    }
-->
</script>

</head>

<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="javascript:Submit();">

<form name="formZZ" method="post" action="http://example.com/egg.aspx">

<input type="hidden" name="token" value="UFASGFJKASGDJFGAJS">

</form>

Answer 1:

urllib.request自动跟随重定向; 你不需要做任何事情。

这里的问题是,有没有重定向可循。 该网页使用Javascript功能来伪造一个表单提交,一旦它的加载。 urllib只是抓取网页的内容; 它没有实现一个浏览器的DOM和运行JavaScript代码。

这取决于你如何一般需要你的脚本中,最简单的解决方案可能是一些哈克。 例如,如果你只是想蜘蛛500页,所有具有类似的结构,但不同的细节,只要找到action的第一个form并导航到这一点。

此外,如果获取的页面并处理它们是两个不同的步骤,您可能需要编写与超级简单的JavaScript / Greasemonkey的取出器(在浏览器中运行,所以它已经有了一个工作DOM实现等)和独立的幻想在Python脚本处理(这只是对最终取/生成的HTML页操作)。

如果你需要充分一般来说,最简单的解决办法可能是使用selenium浏览器自动化框架。 (或者,也许,PyWin32或PyObjC直接自动化IE或Webkit的。)

如果你想要最好的可能的解决方案,并有无限的资源...写自己的实现DOM和挂钩你最喜欢的Javascript解释(可能的SpiderMonkey或V8)。 这是只有约2 /三分之二为多的工作,写一个新的浏览器。 (你也许能找到让你80%的方式出现碎片。例如,如果你愿意使用的Jython,而不是作为CPython的你的Python解释器, HtmlUnit是非常漂亮的。)



文章来源: How to follow a redirect with urllib?