requests.get()返回200但body是空的

时间:2017-11-06 03:39:47

标签: python python-3.x python-requests

我有一个稍大的python3导入脚本,其中部分内容是获取一些URL并解析正文。

代码如下所示:

 import requests
 url = 'http://...'  <-- some url here which returns an html page with curl
 req = requests.get(url)

 print("--- status_code %s" % req.status_code)
 print("--- body length %s" % len(req.text))

我得到了:

 --- status_code 200
 --- body length 0

查看标题我看到了:

 {'Keep-Alive': 'timeout=5, max=100', 'Content-Length': '0', 'Date': 'Mon, 06 Nov 2017 03:14:49 GMT', 'Server': 'Apache/2.4.18 (Ubuntu)', 'Connection': 'Keep-Alive', 'Content-Type': 'text/html; charset=utf-8'}

我尝试到处搜索内容长度为0的原因,我无法弄明白。

为了将其作为一个单元进行测试,我创建了一个小脚本,以便使用相同的代码段来测试相同的网址。这个测试脚本工作正常!

为什么一个脚本工作但另一个脚本不工作?我正在读到这是默认情况下阻塞,所以它应该在两种情况下都有效。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

您尝试从主脚本和代码段访问服务器的次数和频率是多少次?

如果您尝试解析某些外部网站,它可能会变得“生气”#34;并返回零大小的内容。这是防止网站攫取的一种常见措施。 在这种情况下,只要执行一次或两次,您的测试脚本就可以正常工作。但是,经过一定次数的执行(五次,十次或每秒十次)后,您的主要脚本将被网站限制一段时间。

如果是这种情况,您可以尝试在脚本中插入一些延迟。

答案 1 :(得分:0)

我想出来了。问题是我的愚蠢。我尝试获取的URL在查询中包含一个“\ n”字符,导致页面抛出错误。谢谢Klaus提醒我检查服务器。