我正在尝试编写一个脚本,将我提供的数据输入到我提供的URL中的Web表单中。
首先,我只是通过获取页面的html并将其作为文本文件输出来测试它。 (我正在使用Windows,因此.txt。)
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仅包含:< Response [200]&gt ;.
任何人都可以澄清这里发生了什么吗?另外,你可能会说,我是初学者,我不能在我的生活中找到一个初级水平的教程,解释如何使用请求(或urllib [2]或selenium或其他)发送数据到网页并检索结果。谢谢!
答案 0 :(得分:2)
你想:
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__
方法,如下所示:
def __repr__(self):
return '<Response [%s]>' % (self.status_code)
这就是<Response [200]>
的来源。
requests.Reponse
有一个content
属性,该属性是包含HTML的str
(或Python的bytes
)实例。
text
属性是unicode
类型,可能是您想要的,也可能不是。您在评论中提到,当您尝试将其写入文件时,您看到UnicodeDecodeError
。我能够用print result.content
替换上面的print result.text
,但我没有收到错误。
如果您需要帮助解决unicode
问题,建议您阅读unicode presentation。它解释了为什么以及何时解码和编码unicode
。
答案 1 :(得分:2)
交互式解释器回应每个不产生None
的表达式的结果。这在常规脚本中不会发生。
使用print
显式回显值:
print response.content
我在这里使用未解码的版本,因为您将stdout重定向到没有其他编码信息的文件。
您最好直接将输出写入文件:
with open('html.txt', 'ab') as outputfile:
outputfile.write(response.content)
这会将未解码的响应主体直接写入文件。