首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请求- Python命令行行为与运行脚本时的行为不同。

请求- Python命令行行为与运行脚本时的行为不同。
EN

Stack Overflow用户
提问于 2016-04-29 17:43:06
回答 2查看 83关注 0票数 1

我正在尝试编写一个脚本,它将把我提供的数据输入到我提供的网址上的web表单中。

首先,我将通过获取页面的html并将其作为文本文件输出来测试它。(我使用的是Windows,因此是.txt。)

代码语言:javascript
运行
复制
import sys
import requests

sys.stdout = open('html.txt', 'a')

content = requests.get('http://www.york.ac.uk/teaching/cws/wws/webpage1.html')

content.text

当我在python命令行(>>>)上执行这个操作(即最后两行)时,我得到了我期望的结果。当我在这个脚本中执行它并从普通命令行运行它时,得到的html.txt是空的。如果我添加print(content),那么html.txt只包含:。

有人能解释一下这是怎么回事吗?而且,正如您可能知道的那样,我是一个初学者,在我的一生中,我无法找到一个初级教程来解释如何使用请求(或urllib2、selenium或其他什么)将数据发送到网页并检索结果。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-29 17:46:41

你想:

代码语言:javascript
运行
复制
import sys
import requests

result = requests.get('http://www.york.ac.uk/teaching/cws/wws/webpage1.html')
if result.status_code == requests.codes.ok:
    with open('html.txt', 'a') as sys.stdout:
        print result.content

请求返回request.Response类型的实例。当您试图打印时,调用了__repr__方法,如下所示:

代码语言:javascript
运行
复制
def __repr__(self):
    return '<Response [%s]>' % (self.status_code)

这就是<Response [200]>的来历。

requests.Reponse有一个content属性,它是包含strstr(或bytes for Python3)的一个实例。

text属性是unicode类型,它可能是您想要的,也可能不是您想要的。您在注释中提到,当您试图将UnicodeDecodeError写入文件时,您看到了它。我能够将上面的print result.content替换为print result.text,但是我没有得到这个错误。

如果您需要帮助解决您的unicode问题,我建议您阅读这个unicode表示。它解释了为什么以及何时解码和编码unicode

票数 2
EN

Stack Overflow用户

发布于 2016-04-29 17:51:37

交互式解释器回显不产生None的每个表达式的结果。这种情况不会发生在常规脚本中。

使用print显式回送值:

代码语言:javascript
运行
复制
print response.content

我在这里使用了未解码的版本,因为您要将stdout重定向到没有进一步编码信息的文件。

但是,最好将输出直接写入文件:

代码语言:javascript
运行
复制
with open('html.txt', 'ab') as outputfile:
    outputfile.write(response.content)

这将未解码的响应体直接写入文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36944487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档