请求的轻量级缓存包装

crequests的Python项目详细描述


一个python库,用于在使用著名的请求模块进行抓取时缓存数据

刮擦时经常会出问题。为了最大限度地减少你正在抓取的网站的负担,缓存数据是个好主意。这个库透明地完成了所有这些。在

使用此模块,您可以创建crequests.Session(继承自requests.Session)的实例。通过这个实例,您可以使用requests.Session的所有标准方法。在后台,当您使用请求库的所有已知方法时,所有神奇的缓存都会发生

请求的正常使用

使用“请求”模块执行get请求的常规方法如下:

importrequestshtml=requests.get("http://httpbin.org/html").content

如果您需要在测试或开发阶段多次运行程序,则每次都会从网站获取内容,这会给网站带来压力。它也可能很慢。在

如果这不是一个很好的例子,那么你的程序很可能会有上百页的问题。在

营救船员

第一次安装crequests

^{pr2}$

现在,您可以实现如下相同的请求:

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
插入表达式以完成JAVA语句块时出现语法错误   在linkedlist中的特定节点后插入java   java如何将参数传递给安卓 junit测试(参数化测试)   java在运行时将数据添加到片段中的RecyclerView,在该片段中,数据是在单独的片段中创建的   java apache CsrfPreventionFilter和404错误   java Ask是安卓 6.0的多重权限   java将字符串解析为Time并插入mysqldatabase   java扩展MyBatis映射器接口可能导致异常   java SparkSql不支持日期格式   在java中剪切字符串的一部分   将Java lambda的结果分配给字段   在Java中解析OCL?   java解析json到安卓中活动中的对象   用于时区转换的JavaAPI   在Oracle上建立与ESRI geodatabase直接连接的java在未处于调试模式时挂起   拆分文件时出错。使用Java8的xml文件   java eclipse jsp无颜色、代码完成和错误检测   java spring kafka侦听器在错误的位置查找ContainerProperty   java Springboot应用程序@EnableConfigServer无法在Eclipse中解析   当尝试使用ConstraintLayout将java视图添加到同一行时,java视图会被截断