gpt4 book ai didi

python - 使用 Python 请求获取 html?

转载 作者:IT老高 更新时间:2023-10-28 20:47:51 28 4
gpt4 key购买 nike

我正在尝试自学一些基本的网络抓取。使用 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?

最佳答案

有问题的服务器正在给你一个 gzipped 响应。服务器也非常损坏;它发送以下 header :

$ 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

<!DOCTYPE..>行有不是有效的 HTTP header 。因此,剩余的 header 超过 Server忽略。为什么服务器插入不清楚;在所有可能的引擎盖WRCCWrappers.py是一个 CGI 脚本,它不输出 header ,但在 doctype 行之后包含一个双换行符,欺骗 Apache 服务器在那里插入额外的 header 。

因此,requests也没有检测到数据是 gzip 编码的。数据就在那里,你只需要解码它。或者,如果它不是很不完整,你也可以。

解决方法是告诉服务器不要打扰压缩:

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

并返回未压缩的响应。

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

>>> 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'}

content-encoding信息存在,所以有requests按预期为您解码内容。

关于python - 使用 Python 请求获取 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803503/

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