deb*_*uti 11 python google-sheets
我可以用wget下载google docs csv:
wget --no-check-certificate --output-document=locations.csv 'https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv'
Run Code Online (Sandbox Code Playgroud)
但是我不能用python下载相同的csv:
import urllib2
request = urllib2.Request('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1284.0 Safari/537.13')
opener = urllib2.build_opener()
data = opener.open(request).read()
print(data)
Run Code Online (Sandbox Code Playgroud)
结果是谷歌登录页面.我究竟做错了什么?
Jay*_*eis 18
只需使用请求,它比使用urllib更好.
试试这个.
import requests
response = requests.get('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
assert response.status_code == 200, 'Wrong status code'
print(response.content)
Run Code Online (Sandbox Code Playgroud)
Don*_*ing 11
你没有存储cookie.
首先让我说我完全支持使用最优秀的requests库的建议.
但是,如果您需要在vanilla Python 2中执行此操作,问题在于Google通过HTTP 302重定向将您弹出,并且它希望您记住它为每个响应设置的cookie.当它检测到您没有存储cookie时,会将您重定向到登录页面.
默认情况下,urllib2.urlopen(或从中返回的开启者build_opener)将遵循302重定向,但它不会存储HTTP cookie.你必须教你的开场白如何做到这一点.像这样:
>>> from cookielib import CookieJar
>>> from urllib2 import build_opener, HTTPCookieProcessor
>>> opener = build_opener(HTTPCookieProcessor(CookieJar()))
>>> resp = opener.open('https://docs.google.com/spreadsheet/ccc?key=0ArM5yzzCw9IZdEdLWlpHT1FCcUpYQ2RjWmZYWmNwbXc&output=csv')
>>> data = resp.read()
Run Code Online (Sandbox Code Playgroud)
同样,requests尽可能使用,但如果不可能,标准库可以完成工作.
| 归档时间: |
|
| 查看次数: |
12831 次 |
| 最近记录: |