gpt4 book ai didi

python - 如何使用 urllib 跟踪重定向?

转载 作者:行者123 更新时间:2023-11-30 23:36:48 24 4
gpt4 key购买 nike

我正在 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>

最佳答案

urllib.request 自动遵循重定向;您无需执行任何操作。

这里的问题是没有可遵循的重定向。该网页在加载后立即使用 JavaScript 来伪造表单提交。 urllib 只是获取页面;它不实现浏览器 DOM 并运行 Javascript 代码。

根据您需要脚本的通用程度,最简单的解决方案可能有些古怪。例如,如果您只是尝试抓取 500 个具有相似结构但详细信息不同的页面,只需找到第一个 formaction 并导航到该页面即可。

此外,如果获取页面和处理它们是两个不同的步骤,您可能需要使用 super 简单的 Javascript/Greasemonkey 编写一个 getter (在浏览器中运行,因此它已经有了一个有效的 DOM 实现等)并且Python 中的一个单独的精美处理脚本(仅在最终获取/生成的 HTML 页面上运行)。

如果您需要完全通用,最简单的解决方案可能是使用 selenium浏览器自动化框架。 (或者,也许可以使用 PyWin32 或 PyObjC 来直接自动化 IE 或 Webkit。)

如果您想要最好的解决方案,并且拥有无限的资源……编写您自己的 DOM 实现并连接您最喜欢的 Javascript 解释器(可能是 Spidermonkey 或 v8)。这大约只相当于编写一个新浏览器的工作量的 2/3。 (您也许能够找到可以完成 80% 任务的部分。例如,如果您愿意使用 Jython 而不是 CPython 作为 Python 解释器,HtmlUnit 就非常灵​​巧了。)

关于python - 如何使用 urllib 跟踪重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com