第3章 下载缓存
在上一章中,我们学习了如何从已爬取到的网页中抓取数据,以及将抓取结果保存到CSV文件中。如果我们还想抓取另外一个字段,比如国旗图片的URL,那么又该怎么做呢?要想抓取这些新增的字段,我们需要重新下载整个网站。对于我们这个小型的示例网站而言,这可能不算特别大的问题。但是,对于那些拥有数百万个网页的网站来说,重新爬取可能需要耗费几个星期的时间。爬虫避免此类问题的方式之一是从开始时就缓存被爬取的网页,这样就可以让每个网页只下载一次。
在本章中,我们将介绍几种使用网络爬虫实现该目标的方式。
在本章中,我们将介绍如下主题:
- 何时使用缓存;
- 为链接爬虫添加缓存支持;
- 测试缓存;
- 使用requests-cache;
- 实现Redis缓存。
3.1 何时使用缓存
缓存,还是不缓存?对于很多程序员、数据科学家以及进行网络抓取的人来说,是一个需要回答的问题。在本章中,我们将介绍如何对网络爬虫使用缓存,不过你是否应当使用缓存呢?
如果你需要执行一个大型爬取工作,那么它可能会由于错误或异常被中断,缓存可以帮助你无须重新爬取那些可能已经抓取过的页面。缓存还可以让你在离线时访问这些页面(出于数据分析或开发的目的)。
不过,如果你的最高优先级是获得网站最新和当前的信息,那此时缓存就没有意义。此外,如果你没有计划实现大型或可重复的爬虫,那么可能只需要每次去抓取页面即可。
在开始实现之前,你可能想要简要了解一下正在抓取的页面多久会发生变更,或是你应该多久清空缓存并抓取新页面,不过首先让我们学习如何使用缓存!
3.2 为链接爬虫添加缓存支持
要想支持缓存,我们需要修改第1章中编写的download
函数,使其在URL下载之前进行缓存检查。另外,我们还需要把限速功能移至函数内部,只有在真正发生下载时才会触发限速,而在加载缓存时不会触发。为了避免每次下载都要传入多个参数,我们借此机会将 ...
Get 用Python写网络爬虫(第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.