Chr*_*rgo 20 python python-2.7 python-requests
我正在使用请求将pdf上传到API.它存储为下面的"响应".我想把它写成一个excel.
import requests
files = {'f': ('1.pdf', open('1.pdf', 'rb'))}
response = requests.post("https://pdftables.com/api?&format=xlsx-single",files=files)
response.raise_for_status() # ensure we notice bad responses
file = open("out.xls", "w")
file.write(response)
file.close()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
file.write(response)
TypeError: expected a character buffer object
Run Code Online (Sandbox Code Playgroud)
JGC*_*JGC 24
我相信所有现有的答案都包含相关信息,但我想总结一下。
requestsget 和 post 操作返回的响应对象包含两个有用的属性:
response.text- 包含str响应文本。response.content-包含bytes与原始响应内容。您应该根据您期望的响应类型选择这些属性中的一个或其他。
response.textresponse.content.将响应写入文件时,您需要使用具有适当文件写入模式的open 函数。
"w"- 纯写模式。"wb"- 二进制写入模式。# Request the HTML for this web page:
response = requests.get("https://stackoverflow.com/questions/31126596/saving-response-from-requests-to-file")
with open("response.txt", "w") as f:
f.write(response.text)
Run Code Online (Sandbox Code Playgroud)
# Request the profile picture of the OP:
response = requests.get("https://i.stack.imgur.com/iysmF.jpg?s=32&g=1")
with open("response.jpg", "wb") as f:
f.write(response.content)
Run Code Online (Sandbox Code Playgroud)
原始代码应该使用wband工作response.content:
import requests
files = {'f': ('1.pdf', open('1.pdf', 'rb'))}
response = requests.post("https://pdftables.com/api?&format=xlsx-single",files=files)
response.raise_for_status() # ensure we notice bad responses
file = open("out.xls", "wb")
file.write(response.content)
file.close()
Run Code Online (Sandbox Code Playgroud)
但我会更进一步,将with 上下文管理器用于open.
import requests
with open('1.pdf', 'rb') as file:
files = {'f': ('1.pdf', file)}
response = requests.post("https://pdftables.com/api?&format=xlsx-single",files=files)
response.raise_for_status() # ensure we notice bad responses
with open("out.xls", "wb") as file:
file.write(response.content)
Run Code Online (Sandbox Code Playgroud)
您可以使用response.text写入文件:
import requests
files = {'f': ('1.pdf', open('1.pdf', 'rb'))}
response = requests.post("https://pdftables.com/api?&format=xlsx-single",files=files)
response.raise_for_status() # ensure we notice bad responses
file = open("resp_text.txt", "w")
file.write(response.text)
file.close()
file = open("resp_content.txt", "w")
file.write(response.text)
file.close()
Run Code Online (Sandbox Code Playgroud)
Sai*_*ait -20
正如彼得已经指出的那样:
In [1]: import requests
In [2]: r = requests.get('https://api.github.com/events')
In [3]: type(r)
Out[3]: requests.models.Response
In [4]: type(r.content)
Out[4]: str
Run Code Online (Sandbox Code Playgroud)
您可能还想检查一下r.text。
另外: https: //2.python-requests.org/en/latest/user/quickstart/