urllib2.urlopen(theurl).read() ...这会下载文件.
urllib2.urlopen(theurl).geturl() ...这个下载文件吗?(多久时间)
我有一个数据密集型的Python脚本,它使用HTTP连接来下载数据.我通常一夜之间运行它.有时连接会失败,或者网站暂时无法使用.我有基本的错误处理,捕获这些异常并定期再次尝试,在重试5分钟后正常退出(并记录错误).
但是,我注意到有时这项工作就冻结了.不会抛出任何错误,并且作业仍在运行,有时在最后一条打印消息后几小时.
什么是最好的方式:
UPDATE
感谢大家的帮助.正如你们中的一些人所指出的那样,urllib和socket模块没有正确设置超时.我使用的Python 2.5与游离碱和urllib2的模块,并捕捉和处理MetawebErrors和urllib2.URLErrors.以下是最后一个脚本挂起12小时后的错误输出示例:
File "/home/matthew/dev/projects/myapp_module/project/app/myapp/contrib/freebase/api/session.py", line 369, in _httpreq_json
resp, body = self._httpreq(*args, **kws)
File "/home/matthew/dev/projects/myapp_module/project/app/myapp/contrib/freebase/api/session.py", line 355, in _httpreq
return self._http_request(url, method, body, headers)
File "/home/matthew/dev/projects/myapp_module/project/app/myapp/contrib/freebase/api/httpclients.py", line 33, in __call__
resp = self.opener.open(req)
File "/usr/lib/python2.5/urllib2.py", line 381, in open
response = self._open(req, data)
File "/usr/lib/python2.5/urllib2.py", line 399, in _open
'_open', …Run Code Online (Sandbox Code Playgroud) urllib从网址中获取数据对吗?是否有一个python库,可以反过来并将数据发送到网址(例如,到您管理的网站)?如果是这样,该库是否与apache兼容?
谢谢.
我得到了一些非常混乱的网址,我在这里通过抓取,问题是它们在路径和查询字符串中包含空格或其他特殊字符,这里有一些例子
http://www.example.com/some path/to the/file.html
http://www.example.com/some path/?file=path to/file name.png&name=name.me
Run Code Online (Sandbox Code Playgroud)
那么,是否有一种简单而强大的方法来逃避网址,以便我可以将它们传递给urlopen?我尝试了urlib.quote,但它似乎也逃避了查询字符串中的'?','&'和'=',它似乎也逃避了协议,目前,我想要做的是使用正则表达式分离协议,路径名和查询字符串并单独转义它们,但有些情况下它们没有正确分开任何建议表示赞赏
所以,我一直在尝试制作一个下载我的zip文件的简单下载程序.
代码如下所示:
import urllib2
import os
import shutil
url = "https://dl.dropbox.com/u/29251693/CreeperCraft.zip"
file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open('c:\CreeperCraft.zip', 'w+')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (file_name, file_size)
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
status = status + chr(8)*(len(status)+1)
print status,
f.close()
Run Code Online (Sandbox Code Playgroud)
问题是,它将文件下载到正确的路径,但是当我打开文件时,它的损坏,只有1张图片出现,当你点击它时,它说File Damaged.
请帮忙.
我是python的新手(我正在使用python3),我正在尝试使用urllib2来学习制作网络爬虫.我似乎无法在任何地方找到它.我可以导入urllib,但是urllib2与urllib不在同一个目录中,当我尝试导入urllib2时,我在终端中收到错误.
根据我的理解,urllib2应该是pythons标准库的一部分.我在哪里可以找到它?有什么地方我可以单独下载并将它放在与urllib相同的目录中吗?
好的,所以我使用与此非常类似的代码(https://gist.github.com/metadaddy-sfdc/1374762)来获取身份验证令牌并使用libur2为python中的其余api执行简单查询以获取销售人员数据库,但是当我尝试按照本答案中给出的说明时如何使用urllib2制作HTTP DELETE方法?,
我无法让它工作,所以我可以使用删除,两个代码都使用liburl但它们似乎是不同的格式,所以我不知道如何将堆栈交换提供的解决方案应用到我的代码,因为你可以告诉我我是初学者,所以任何帮助将不胜感激
编辑:这是我用密码/密码消失的代码
import urllib
import urllib2
import json
import pprint
import re
import subprocess
def authorise():
consumer_key = '**********************'
consumer_secret = '**************'
username = '***********'
password = '*****************'
login_server = 'https://login.salesforce.com'
token_url = login_server+'/services/oauth2/token'
params = urllib.urlencode({
'grant_type': 'password',
'client_id': consumer_key,
'client_secret': consumer_secret,
'username': username,
'password': password
})
data = urllib2.urlopen(token_url, params).read()
oauth = json.loads(data)
return oauth
def country_id_query(params):
query_url = oauth['instance_url']+'/services/data/v23.0/query?%s' % params
headers = {
'Authorization': 'OAuth '+oauth['access_token']
}
req = urllib2.Request(query_url, …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码在我的应用程序中发送Http请求,然后显示结果:
def get(self):
url = "http://www.google.com/"
try:
result = urllib2.urlopen(url)
self.response.out.write(result)
except urllib2.URLError, e:
Run Code Online (Sandbox Code Playgroud)
我希望得到google.com页面的html代码,但我得到这个标志">",那有什么不对?
我正在使用rest api发送推送通知.文件在这里. 我正在使用金字塔并使用芹菜安排这些推送通知.
这是我的代码示例:
result = urllib2.urlopen(urlRequest, headers={
"X-Parse-Application-Id": settings["parse.application.id"],
"X-Parse-REST-API-Key": settings["parse.restapi.key"],
"Content-Type": "application/json"
})
connection = httplib.HTTPSConnection('api.parse.com', 443)
connection.connect()
connection.request('POST', '/1/push', json.dumps(data), )
result = json.loads(connection.getresponse().read())
Run Code Online (Sandbox Code Playgroud)
但是芹菜记录了这个错误:
2015-08-18 16:39:45,092 INFO [celery.worker.strategy][MainThread] Received task: app_v1_1.tasks.push_notification[877906d8-1ea7-4b1f-8a54-aa61bffb40e8]
2015-08-18 16:39:45,094 ERROR [celery.worker.job][MainThread] Task app_v1_1.tasks.push_notification[877906d8-1ea7-4b1f-8a54-aa61bffb40e8] raised unexpected: TypeError("urlopen() got an unexpected keyword argument 'headers'",)
Traceback (most recent call last):
File "/home/apnistreet/work/ve/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/comp/work/ve/local/lib/python2.7/site-packages/celery/app/trace.py", line 438, in __protected_call__
return self.run(*args, **kwargs)
File "/home/comp/work/site/code/apnistreet_v1_1/tasks.py", line …Run Code Online (Sandbox Code Playgroud) 当我打开这个网址时,我收到了这个回复:
r = Request(r'http://airdates.tv/')
h = urlopen(r).readline()
print(h)
Run Code Online (Sandbox Code Playgroud)
响应:
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xed\xbdkv\xdbH\x96.\xfa\xbbj\x14Q\xaeuJ\xce\xee4E\x82\xa4(9m\xe7\xd2\xd3VZ\xaf2e\xab2k\xf5\xc2\n'
Run Code Online (Sandbox Code Playgroud)
这是什么编码?有没有办法根据标准库解码它?
提前感谢您对此事的任何见解!
PS:好像是gzip.