请求的轻量级缓存包装
crequests的Python项目详细描述
一个python库,用于在使用著名的请求模块进行抓取时缓存数据
刮擦时经常会出问题。为了最大限度地减少你正在抓取的网站的负担,缓存数据是个好主意。这个库透明地完成了所有这些。在
使用此模块,您可以创建crequests.Session
(继承自requests.Session
)的实例。通过这个实例,您可以使用requests.Session
的所有标准方法。在后台,当您使用请求库的所有已知方法时,所有神奇的缓存都会发生
请求的正常使用
使用“请求”模块执行get请求的常规方法如下:
importrequestshtml=requests.get("http://httpbin.org/html").content
如果您需要在测试或开发阶段多次运行程序,则每次都会从网站获取内容,这会给网站带来压力。它也可能很慢。在
如果这不是一个很好的例子,那么你的程序很可能会有上百页的问题。在
营救船员
第一次安装crequests
:
现在,您可以实现如下相同的请求:
importcrequestscrs=crequests.Session("cachedata")html=crs.get("http://httpbin.org/html").content
运行此程序将在当前工作目录中创建一个名为“cachedata”的缓存文件夹。原始html将以与之前相同的方式提取并返回。但除此之外,还存储了一个本地缓存副本。在
下次运行代码时,将从磁盘检索完全相同的数据并返回。在
可以通过删除文件夹来删除缓存
技术信息
crequests.Session
类扩展了requests.Session类。在
所有方法都应该像原始类一样公开。最有用的是.get/.put/.post。。。但请查看他们的文档以了解更多详细信息。在
所有缓存方法都返回一个requests.models.Response
对象。在
完整的例子
importcrequestsimportloggingfrombs4importBeautifulSouplogging.basicConfig(level=logging.INFO,format="%(asctime)s [%(name)s] %(levelname)7s: %(message)s",datefmt="%H:%M:%S",)url="http://httpbin.org/html"crs=crequests.Session("cachedata")for_inrange(3):# Do the same over and over... Check that we get cache hits - this should be fastrawHtml=crs.get(url).contentifrawHtml:soup=BeautifulSoup(rawHtml,"html.parser")print(soup.body.h1)
通过运行此示例,日志输出显示缓存的工作方式与预期相同:
07:01:45 [crequests.Session] INFO: CACHE-MISS. 'http://httpbin.org/html' not in cache.
07:01:45 [crequests.Session] INFO: Getting data directly from: http://httpbin.org/html
07:01:45 [crequests.Session] INFO: Writing cachefile 'cachedata/httpbin.org/da/daff1d3c15c93dda35b7b95ca41f7e06d70b9551' with content of 'http://httpbin.org/html'
<h1>Herman Melville - Moby-Dick</h1>
07:01:47 [crequests.Session] INFO: CACHE-HIT. 'http://httpbin.org/html' got cacheinfo in 'cachedata/httpbin.org/da/daff1d3c15c93dda35b7b95ca41f7e06d70b9551'
<h1>Herman Melville - Moby-Dick</h1>
07:01:47 [crequests.Session] INFO: CACHE-HIT. 'http://httpbin.org/html' got cacheinfo in 'cachedata/httpbin.org/da/daff1d3c15c93dda35b7b95ca41f7e06d70b9551'
<h1>Herman Melville - Moby-Dick</h1>
玩得开心。。。在
Alex Skov Jensen
- 项目
标签: