如何使用 urllib 跟踪重定向?

2023-12-04

我正在 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 代码。

根据您需要脚本的通用程度,最简单的解决方案可能是一些hacky。例如,如果您只是尝试抓取 500 个具有相似结构但细节不同的页面,只需找到action第一个的form并导航至该位置。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 urllib 跟踪重定向? 的相关文章

  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 创建 xyz 海拔数据的曲面图

    我正在尝试用 python 创建一座山的表面图 其中我有一些 xyz 数据 最终结果应该类似于that https i stack imgur com rKQV0 png 该文件的格式如下 616000 0 90500 0 3096 712
  • 我可以同时打开两个 Tkinter Windows 吗?

    可以同时打开2个窗口吗 import tkinter as Tk import random import math root Tk Tk canvas Tk Canvas root background image Tk PhotoIma
  • Discord.py 斜线命令在 cogs 中不起作用

    我正在构建一个不和谐的机器人 并且想要在 cogs 内使用斜杠命令 但这些命令不显示或工作 这是代码 cog guild ids 858573429787066368 861507832934563851 class Slash comma
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • lmfit模型拟合然后预测

    我正在领养lmfit进行曲线拟合并使用拟合模型进行预测 然而下面的代码并没有达到我想要的效果 能否请你帮忙 谢谢 import numpy as np from lmfit import Model def linearModel x a0
  • Python 中“is”运算符的语义是什么?

    如何is运算符确定两个对象是否相同 它是如何工作的 我找不到它的记录 来自文档 http docs python org reference datamodel html 每个对象都有一个身份 一个类型 和一个值 对象的身份 一旦发生就永远
  • ImproperlyConfigured at / 不允许空静态前缀 - Django

    我正在使用 Django 上传 显示图像 该网站部署在 Heroku 上 下列的this https coderwall com p bz0sng教程我能够成功上传图像 但是 图像并未显示在模板中 然后我了解到我的 urls py 末尾应该
  • 类变量:“类列表”与“类布尔值”[重复]

    这个问题在这里已经有答案了 我不明白以下示例的区别 一次类的实例可以更改另一个实例的类变量 而另一次则不能 示例1 class MyClass object mylist def add self self mylist append 1
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • 使用具有可变数量索引的 numpy mggrid

    如何将 numpy mgrid 与可变数量的索引一起使用 我在 github 上找不到任何人将其与硬编码值以外的任何内容一起使用的示例 import numpy as np np mgrid 1 10 1 10 this works fin
  • Django 1.7:如何使用 html/css 文件作为模板发送电子邮件

    从 Django 1 7 开始 可以send email 使用新参数 html message 不幸的是 没有关于如何使用它的全面指南 新手友好 或者至少我找不到它 我需要使发送的电子邮件变得漂亮 因此 我试图弄清楚如何将我的消息包含到 h
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 为什么我会在 Python 字符串格式中使用除 %r 之外的其他内容?

    我偶尔会使用 Python 字符串格式 这可以像这样完成 print int i Float f String s 54 34 434 some text 但是 这也可以这样做 print int r Float r String r 54
  • JSONDecodeError:额外数据:Python [重复]

    这个问题在这里已经有答案了 我使用以下代码从文件加载 json file file name obj list with open file as f for json obj in f obj list append loads json
  • 如何使用 keras.backend.gradients() 获取梯度值

    我试图获得 Keras 模型的输出相对于模型输入 x 而不是权重 的导数 似乎最简单的方法是使用 keras backend 中的 梯度 它返回梯度张量 https keras io backend https keras io backe
  • 在Python中使用os.makedirs创建目录时出现权限问题

    我只是想处理上传的文件并将其写入工作目录中 该目录的名称是系统时间戳 问题是我想以完全权限创建该目录 777 但我不能 使用以下代码创建的目录755权限 def handle uploaded file upfile cTimeStamp

随机推荐

  • 如何检查列表中的哪些项目满足特定条件?

    如何创建一个名为busLineLonger的函数 它至少接收两个参数来决定公交线路是否更长 This is how it works busStops number of the bus number of stops busLineLon
  • 从 MVC 3 中的 ActionResult 类型方法将 JSon 数组返回到 $.ajax

    我有一个 TreeView 助手 它获取类别列表及其链接 我这样做了 helper TreeView FavouriteLinksXmlMVC3 Controllers HomeController cat cat new Favourit
  • 使用来自内容提供商和活动的 MvvmCross

    我正在尝试在我的一个应用程序中使用 MvvmCross v3 该应用程序由活动 内容提供程序和广播接收器组成 然而 我并没有很成功 该应用程序由一个包含逻辑 模型和视图模型的 Core PCL 和一个包含所有 MonoDroid 特定内容的
  • 从 C# 引用 VBA 程序集时出现运行时错误

    我有一个 C NET 3 5 项目 不幸的是它依赖于几个 VB6 ActiveX 控件 到目前为止 我已经能够通过简单地在项目中添加对控件的引用并正常引用它们来愉快地访问 ActiveX 控件中定义的数据容器和方法 然而 今天我遇到了一个障
  • 当父进程退出时,如何使子进程退出?

    我正在使用 ProcessBuilder 启动一个子进程 并且如果父进程退出 则需要子进程退出 在正常情况下 我的代码会正确停止孩子 但是 如果我导致操作系统杀死父进程 子进程将继续运行 有什么方法可以将子进程 绑定 到父进程 这样当父进程
  • 如何绘制实心圆?

    我正在根据规范使用 C 代码创建位图 bmp 文件 并且我想在位图上绘制简单的图元 以下代码显示了如何在位图上绘制矩形 if curline gt type 1 draw a rectangle int xstart curline gt
  • SQLAlchemy 返回奇怪的数据

    我正在尝试从表中导出日期 我只想将原始创建的对象拉出来 我正在运行以下查询 return model Session query cls filter cls issue id issue id order by desc created
  • SQL:更新表,其中列=多个值

    我创建了一个 SQL 查询 它更新表列 其中另一列 值 CODE Update Products Set ProductName Shoes WHERE ProductID 1 2 3 4 5 6 7 8 问题在于ProductID 我怎样
  • java应用程序可以分配比jvm启动参数指定的更多的内存吗?

    假设 java 应用程序不使用任何本机库 有没有办法让它分配比 jvm 启动参数指定的内存更多的内存 反过来问 我可以相信 Java 应用程序永远不会分配比 JVM 启动参数限制更多的内存吗 是的 它可以 它不能在 JVM 堆上分配更多内存
  • 如何获取本地时间并将其放入字符串中

    我有一个方法s它有一个日期时间作为参数 怎么用c 写呢 In c it is string s System DateTime sd 编辑 如何调用S方法 我也想在一个字符串中显示小时 在另一个字符串中显示第二个 等等 另一个问题是 如何转
  • 如何以编程方式配对 Android 蓝牙设备

    我正在开发一个应用程序 我想连接蓝牙设备 主要问题是我不希望用户输入所需的密码 而是应用程序应该自己执行此操作 我没有任何与连接相关的问题 只想要由应用程序本身插入并完成 pin 身份验证过程 我发现以下代码我确信它可以工作 但不确定如何在
  • Gatsby Develop:安装“sharp”模块时出错

    我刚刚在 Gatsby 上从入门模板上进行了 git 克隆 当我运行 gatsbydevelopment 时遇到了这个错误 我已经删除了节点模块 以及节点模块中的锐模块 无济于事 请让我知道此时发生了什么 PS C Users ipche
  • Keras:使用模型的一阶导数和二阶导数之和作为最终输出

    假设我使用 Keras 创建了这个模型 model Sequential model add Dense 32 activation tanh input dim 1 model add Dense 10 activation tanh m
  • 子类上的急切加载关联

    我有以下 简化的 类层次结构 def Parent lt ActiveRecord Base end def Child lt Parent belongs to other end def Other lt ActiveRecord Ba
  • jiffies 在无滴答内核中如何递增?

    内核维护一个全局变量 名为jiffies它保存系统启动时的滴答数 定时器中断数 每次发生定时器中断时 内部内核计数器的值都会递增 在无滴答内核 动态滴答中 中断不会定期发生 那么jiffies增加 的价值jiffies总是更新调用do ti
  • Jackson/Hibernate、元获取方法和序列化

    我们有很多具有嵌套关系的休眠实体类 我正在尝试找到将给定实体转换为等效 json 格式的最佳方法 我了解 JsonIgnore Jackson mixins 和 JsonFilters 并且一直在尝试这些 我们面临的挑战如下 使用 OneT
  • 如何通过单击按钮打印 HTML 内容而不是页面? [复制]

    这个问题在这里已经有答案了 我想在用户单击按钮时打印一些 HTML 内容 一旦用户单击该按钮 浏览器的打印对话框将打开 但不会打印网页 相反 它会打印页面上未显示的其他一些 HTML 内容 在问这个问题时 我脑子里几乎没有解决方案 但我不确
  • 如何防止文本元素中出现字母?

    我喜欢最大长度为 3 的输入 这些输入值只能是数字 不能是字母 参考这篇文章 为什么 在 Safari 中不起作用 你可以看到我不能使用
  • Vue DOM 图像无法正确显示

    我正在使用 Vue 框架并使用以下命令创建图像DomUtil Create功能 在此图像中 我想动态地将源写入该图像 但该图像不会向用户显示 我使用以下命令在页面上放置了一个普通图像 img 标签 它在这里工作 仅当创建 DOM 元素时它才
  • 如何使用 urllib 跟踪重定向?

    我正在 Python 3 中创建一个脚本 该脚本访问如下页面 example com daora zz asp x qqrzzt 使用 urllib request urlopen example com daora zz asp x qq