Как выполнить редирект с помощью urllib?
Я создаю скрипт в 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>
Заранее спасибо!
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/3 больше работы, чем написание нового браузера. (И вы можете найти фрагменты, которые помогут вам на 80%. Например, если вы хотите использовать Jython вместо CPython в качестве интерпретатора Python, HtmlUnit
довольно гладко.)