我正在使用GRequests和lxml 在Python 2.7.3中编写一个小脚本,这将允许我从各个网站收集一些可收集的卡片价格并进行比较.问题是其中一个网站限制了请求数量,如果我超过它,则发回HTTP错误429.
有没有办法在GRequestes中添加限制请求的数量,这样我就不会超过我指定的每秒请求数?另外 - 如果发生HTTP 429,我怎样才能使GRequestes在一段时间后重试?
在旁注 - 他们的限制是非常低的.每15秒就有8个请求.我在浏览器中多次破坏它只是刷新页面等待价格变化.
选择块大小有什么指导方针吗?
我尝试了不同的块大小,但它们都没有提供与浏览器或wget下载速度相当的下载速度
这是我的代码的快照
r = requests.get(url, headers = headers,stream=True)
total_length = int(r.headers.get('content-length'))
if not total_length is None: # no content length header
for chunk in r.iter_content(1024):
f.write(chunk)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.?
编辑:我尝试了不同速度的网络..而且我能够实现比我的家庭网络更高的速度..但是当我测试wget和浏览器时..速度仍然无法比较
谢谢
我正在使用Ubuntu 14.04(Trusty Tahr)和Python 2.7.6版.今天,当我创建一个新的virtualenv并尝试过的时候pip install requests,我收到了错误InsecurePlatformWarning.
我在使用Requests包时按照SSL InsecurePlatform错误中的说明解决了此问题.
但我想了解这两个命令之间的实际区别是什么:
pip install requests[security]和pip install requests.
为什么前者安装了三个额外的包?
当我将代码推送到生产环境时,有什么需要注意的事项吗?
他们一般都表现得一样吗?
r = requests.get('http://techtv.mit.edu/videos/1585-music-session-02/download.source')
for i in r.history:
print(i.url)
Run Code Online (Sandbox Code Playgroud)
我认为它应该打印出历史记录,但事实并非如此,上面的网址指向一个视频,但我无法得到它,有人帮忙吗?谢谢
我已经在debian中安装了一个自签名的root ca证书/usr/share/ca-certificates/local并安装了它们sudo dpkg-reconfigure ca-certificates.在这一点上true | gnutls-cli mysite.local很高兴,并且true | openssl s_client -connect mysite.local:443很高兴,但是python2和python3请求模块坚持认为它对证书不满意.
python2:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
raise …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序的一个方法中使用Python的请求库.方法的主体如下所示:
def handle_remote_file(url, **kwargs):
response = requests.get(url, ...)
buff = StringIO.StringIO()
buff.write(response.content)
...
return True
Run Code Online (Sandbox Code Playgroud)
我想为该方法编写一些单元测试,但是,我想要做的是传递一个假的本地URL,例如:
class RemoteTest(TestCase):
def setUp(self):
self.url = 'file:///tmp/dummy.txt'
def test_handle_remote_file(self):
self.assertTrue(handle_remote_file(self.url))
Run Code Online (Sandbox Code Playgroud)
当我使用本地URL 调用requests.get时,我得到了下面的KeyError异常:
requests.get('file:///tmp/dummy.txt')
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/packages/urllib3/poolmanager.pyc in connection_from_host(self, host, port, scheme)
76
77 # Make a fresh ConnectionPool of the desired type
78 pool_cls = pool_classes_by_scheme[scheme]
79 pool = pool_cls(host, port, **self.connection_pool_kw)
80
KeyError: 'file'
Run Code Online (Sandbox Code Playgroud)
问题是如何将本地URL传递给requests.get?
PS:我编写了上面的例子.它可能包含许多错误.
版本:Python 2.7.3
其他库:Python-Requests 1.2.3,jinja2(2.6)
我有一个脚本将数据提交到论坛,问题是非ascii字符显示为垃圾.例如AndréTéchiné这样的名字就像AndréTéchéé一样出现.
以下是数据的提交方式:
1)数据最初是从UTF-8编码的CSV文件加载的,如下所示:
entries = []
with codecs.open(filename, 'r', 'utf-8') as f:
for row in unicode_csv_reader(f.readlines()[1:]):
entries.append(dict(zip(csv_header, row)))
Run Code Online (Sandbox Code Playgroud)
unicode_csv_reader位于Python CSV文档页面的底部:http://docs.python.org/2/library/csv.html
当我在解释器中键入条目名称时,我将名称视为u'Andr\xe9 T\xe9chin\xe9'.
2)接下来我通过jinja2渲染数据:
tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)
Run Code Online (Sandbox Code Playgroud)
当我输入在解释器中呈现的名称时,我再次看到相同的: u'Andr\xe9 T\xe9chin\xe9'
现在,如果我将渲染变量写入这样的文件名,它会正确显示:
with codecs.open('out.txt', 'a', 'utf-8') as f:
f.write(rendered)
Run Code Online (Sandbox Code Playgroud)
但我必须把它发送到论坛:
3)在POST请求代码中我有:
params = {u'post': rendered}
headers = {u'content-type': u'application/x-www-form-urlencoded'}
session.post(posturl, data=params, headers=headers, cookies=session.cookies)
Run Code Online (Sandbox Code Playgroud)
session是一个请求会话.
并且在论坛帖子中显示了该名称.我尝试过以下方法:
如果我输入rendered.encode('utf-8'),我会看到以下内容:
'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?谢谢.
我正在尝试捕获重定向URL的http状态代码3XX/302.但我无法得到它,因为它提供了200个状态代码.
这是代码:
import requests
r = requests.get('http://goo.gl/NZek5')
print r.status_code
Run Code Online (Sandbox Code Playgroud)
我想这应该发出301或302,因为它重定向到另一个页面.我曾经尝试过几次重定向网址(例如http://fb.com),但它又发布了200.应该怎样做才能正确捕获重定向代码?
我正在尝试在python中编写Web代理.我们的目标是访问一个像这样的网址:http://proxyurl/http://anothersite.com/并http://anothersite.com像往常一样看到他的内容.我通过滥用请求库得到了很多,但这并不是请求框架的预期用途.我之前已经编写了扭曲的代理,但我不确定如何将其与我想要做的事情联系起来.这是我到目前为止的地方......
import os
import urlparse
import requests
import tornado.ioloop
import tornado.web
from tornado import template
ROOT = os.path.dirname(os.path.abspath(__file__))
path = lambda *a: os.path.join(ROOT, *a)
loader = template.Loader(path(ROOT, 'templates'))
class ProxyHandler(tornado.web.RequestHandler):
def get(self, slug):
if slug.startswith("http://") or slug.startswith("https://"):
if self.get_argument("start", None) == "true":
parsed = urlparse.urlparse(slug)
self.set_cookie("scheme", value=parsed.scheme)
self.set_cookie("netloc", value=parsed.netloc)
self.set_cookie("urlpath", value=parsed.path)
#external resource
else:
response = requests.get(slug)
headers = response.headers
if 'content-type' in headers:
self.set_header('Content-type', headers['content-type'])
if 'length' in headers:
self.set_header('length', headers['length'])
for block …Run Code Online (Sandbox Code Playgroud) Python 请求模块提供了有关如何在单个请求中上传单个文件的良好文档:
files = {'file': open('report.xls', 'rb')}
Run Code Online (Sandbox Code Playgroud)
我试图通过使用此代码来尝试上传多个文件来扩展该示例:
files = {'file': [open('report.xls', 'rb'), open('report2.xls, 'rb')]}
Run Code Online (Sandbox Code Playgroud)
但它导致了这个错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1052, in splittype
match = _typeprog.match(url)
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)
是否可以使用此模块在单个请求中上载文件列表,以及如何?
python-requests ×10
python ×9
http ×2
python-2.7 ×2
debian ×1
debian-based ×1
performance ×1
pip ×1
proxy ×1
redirect ×1
ssl ×1
throttling ×1
tornado ×1
virtualenv ×1