使用Python请求获取html?

2024-01-22

我正在尝试自学一些基本的网络抓取。使用 Python 的 requests 模块,我能够抓取各种网站的 html,直到我尝试了以下方法:

>>> r = requests.get('http://www.wrcc.dri.edu/WRCCWrappers.py?sodxtrmts+028815+por+por+pcpn+none+mave+5+01+F')

我得到的不是该页面源的基本 html,而是:

>>> r.text
'\x1f\ufffd\x08\x00\x00\x00\x00\x00\x00\x03\ufffd]o\u06f8\x12\ufffd\ufffd\ufffd+\ufffd]...

>>> r.content
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed\x9d]o\xdb\xb8\x12\x86\xef\xfb+\x88]\x14h...

我已经尝试了 get/post 的多种组合以及我可以从文档、SO 和其他示例中猜测到的每种语法。我不明白我在上面看到的是什么,无法将其变成我可以阅读的任何内容,并且不知道如何获得我真正想要的东西。我的问题是,如何获取上述页面的 html?


有问题的服务器正在给你一个压缩响应。服务器也是非常破碎;它发送以下标头:

$ curl -D - -o /dev/null -s -H 'Accept-Encoding: gzip, deflate' http://www.wrcc.dri.edu/WRCCWrappers.py?sodxtrmts+028815+por+por+pcpn+none+mave+5+01+F
HTTP/1.1 200 OK
Date: Tue, 06 Jan 2015 17:46:49 GMT
Server: Apache
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"><html xmlns="http: //www.w3.org/1999/xhtml" lang="en-US">
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 3659
Content-Type: text/html

The <!DOCTYPE..>线有不是有效的 HTTP 标头。因此,剩余的标头过去了Server are ignored。尚不清楚服务器为何会插话;在所有可能的情况下WRCCWrappers.py是一个 CGI 脚本,不输出标头,但在 doctype 行后包含一个双换行符,欺骗 Apache 服务器在那里插入额外的标头。

像这样,requests也没有检测到数据是 gzip 编码的。数据就在那里,你只需要对其进行解码即可。或者如果它不是相当不完整的话你也可以。

解决方法是告诉服务器不要进行压缩:

headers = {'Accept-Encoding': 'identity'}
r = requests.get(url, headers=headers)

并返回未压缩的响应。

顺便说一句,在 Python 2 上,HTTP 标头解析器并不那么严格,并且设法将 doctype 声明为标头:

>>> pprint(dict(r.headers))
{'<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "dtd/xhtml1-transitional.dtd"><html xmlns="http': '//www.w3.org/1999/xhtml" lang="en-US">',
 'connection': 'Keep-Alive',
 'content-encoding': 'gzip',
 'content-length': '3659',
 'content-type': 'text/html',
 'date': 'Tue, 06 Jan 2015 17:42:06 GMT',
 'keep-alive': 'timeout=5, max=100',
 'server': 'Apache',
 'vary': 'Accept-Encoding'}

and the content-encoding信息得以保存,所以有requests如预期的那样为您解码内容。

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

使用Python请求获取html? 的相关文章

随机推荐

  • 蓝牙适配器不会停止扫描 BLE 设备

    在我的应用程序中 我有开始和停止按钮 当用户按下开始时 我调用 startScan 方法 bluetoothAdapter getBluetoothLeScanner startScan getLeScanCallback 当用户按停止时
  • 如何循环遍历数据库的表?

    我试图使用以下代码循环数据库的表 但出现错误java lang UnsupportedOperationException 我什至尝试过cfloop query and other attributes出现错误复杂值无法转换为简单值 谁能告
  • Lua 无法计算 math.abs(29.7 - 30) <= 0.3 [重复]

    这个问题在这里已经有答案了 今天早上我在我的 Lua 脚本中发现了一个错误 这看起来很奇怪 这次评估怎么会失败呢 示例可以在以下位置进行测试here http www lua org cgi bin demo 第一个例子 if math a
  • 为什么 Golang 强制大括号不在下一行?

    correct if true 不正确 if true 为什么要强制执行这种样式 它与语言规范有关 还是只是因为他们更喜欢一种样式而不是另一种样式 为什么有大括号但没有分号 为什么我不能将左大括号放在下一行 Go 使用大括号进行语句分组 这
  • 格式化numpy数组中的浮点数[重复]

    这个问题在这里已经有答案了 如果我有一个像这样的 numpy 数组 2 15295647e 01 8 12531501e 00 3 97113829e 00 1 00777250e 01 如何移动小数点并格式化数字 这样我最终会得到一个像这
  • 如何将 fgetcsv 与字符串一起使用[重复]

    这个问题在这里已经有答案了 如何使用fgetcsv其中输入是字符串而不是资源 如何将字符串转换为资源 fgetcsv需要文件句柄资源 str 1981 2992 19191 n392 488 299 n some ntext 199 222
  • 无法拉伸内部 StackPanel

    使用下面的设置 我可以将窗口的整个宽度着色为紫色 内部堆叠面板为黄绿色 并移至左侧
  • 在 Rails 3.2 中禁用解释

    是否可以通过配置全局禁用 Rails 3 2 中的新解释功能 我正在使用 activerecord sqlserver adapter 3 2 1 并且 gem 的解释 显示计划 部分似乎存在一些错误 引用自http weblog ruby
  • 从 C# 以编程方式创建文件到 Onedrive?

    我想从 C 直接创建 doc docx pptx 或 excel 文件到我的 Onedrive 帐户 我已经尝试过这个 但它对我不起作用 有人知道我做错了什么吗 谢谢 public async Task
  • 是否可以部署独立的 .NET Framework 应用程序?

    我正在开发一个使用 Net Framework 的 C Net 应用程序 但当用户在其计算机上安装该应用程序时遇到问题 他们中的一些人只是不知道如何安装 Net Framework 我正在寻找这个问题的解决方案 并且我发现了 Net Cor
  • 如何使用变量而不是文件来让任何命令写入?

    我在用着curl cookie jar
  • Python 中的 RAII:__del__ 有什么意义?

    乍一看 好像是Python的 del 特殊方法提供了与 C 中析构函数几乎相同的优点 但根据Python文档 https docs python org 3 4 reference datamodel html https docs pyt
  • 在 Nexus 上使用 nuget 代理时,dotnet 恢复失败

    我在内部网络的 Nexus v 3 9 0 01 上有一个 nuget 代理 我自己还没有填充本地 Nexus 存储库 并且不知道它是如何完成的或是否出现任何问题 但是 我可以手动上传新包 构建在 Bamboo 代理上进行 无法连接到公共存
  • 如何将 Scala 脚本拆分为多个文件

    作为脚本语言 Scala 是否有某种 include 指令 或者有没有办法从其他脚本启动脚本 The scala命令有 load filename命令以交互方式加载 Scala 文件 或者 scala命令的 i filename参数可用于预
  • Android 中的 Viewpager 底部有固定选项卡,每个选项卡中有图标和文本

    我想创建以下布局 一个带有 viewpager 的活动以及一个选项卡 该选项卡保留在活动的底部以指示用户位于 4 个片段中的哪一个 并且所选选项卡通过 活动颜色 突出显示 我花了一些时间在网上查看各种资源来添加此选项卡 http devel
  • 更好地使用验证或离开事件来验证文本框数据?

    在为 VB NET 文本框编写验证逻辑时 最好使用哪个事件处理程序 证实 or Leave 据我了解 它们是同时发生的 然而 根据这篇文章 MSDN Control Leave 事件 http msdn microsoft com en u
  • CSS 网格。隐藏未使用的区域

    我有基于已知元素构建的网格模板区域 但并非所有元素都可以从数据库中获取 如果我没有从数据库中获取某些内容 那么我不会渲染 html 元素 并且会得到一个带有间隙的空 虚线 行 请参阅附图 空行位于蓝色框下方 是否可以隐藏未使用的区域或消除其
  • 如何使用 avx 指令将 float 向量转换为短整型?

    基本上我如何使用 AVX2 内在函数编写与此等效的内容 我们在这里假设result in float属于类型 m256 while result属于类型short int or short int 8 for i 0 i lt 8 i re
  • 关于Javascript注入的问题

    我一直在 asp net mvc 学习网站上阅读有关 JavaScript 注入的内容 这真是令人大开眼界 我什至从未意识到 想过有人使用 JavaScript 来进行一些奇怪的屁股注入攻击 然而 它给我留下了一些悬而未决的问题 First
  • 使用Python请求获取html?

    我正在尝试自学一些基本的网络抓取 使用 Python 的 requests 模块 我能够抓取各种网站的 html 直到我尝试了以下方法 gt gt gt r requests get http www wrcc dri edu WRCCWr