如何免费阅读经济学人文章
涛叔上海爆发疫情,隔离在家的我一直为生计发愁,没有心情更新博客。期间的所见所闻让我再一次意识到要加强英文学习。为此,我尝试阅读更多英文版的新闻和评论。其中,比较有名的就是经济学人(The Economist)。原则上我们要支持正版,但每年一百八十九美元的订阅费确实不符合咱们的国情。那只好想办法薅资本主义的羊毛了。今天就把薅羊毛的办法分享给大家。
2024年8月更新:
谷歌已经下线 cache 功能,无法通过谷歌查看 Economist 内容。
但后来我发现可以通过 archive.is 网站访问,更方便,不需要油猴脚本。
经济学人网址: https://archive.is/y2zWh
archive.is 需要翻墙才能访问。
一般网站为保护版权,只让付费用户阅读文章内容。但这么一来,相关的文章也就没法用搜索引擎搜到,也就失去了很重要的流量来源。为此,多数网站都允许谷歌的爬虫来抓取自己的文章内容,无论是否付费,都可以。因为谷歌比较良心,它虽然抓取的文章内容,也仅仅用来做搜索匹配之用,不会主动向用户展示全文内容。所以用户可以通过谷歌搜索到付费的内容,然后再跳转到源网站付费阅读。这样做对用户、对谷歌、对内容方都有利。
虽然谷歌不会主动提供文章原文,但是它有一个所谓的网页快照功能。通过该功能,我们可以查看谷歌抓取的文章内容,从而绕开原网站的付费限制。这就是免费阅读原理。
如果你想查看某个网页,比如它的链接是https://taoshu.in/about.html,我们可以把它拼接出对应的网页快照链接 https://webcache.googleusercontent.com/search?q=cache:https://taoshu.in/about.html,就可以打开了。当然了,前提是你能正常访问谷歌网站。
这样做虽然可行,但用起来很不方便。如果只是分享这样小技巧,那就不需要写一篇文章了。接下来就跟大家分享一个更方便的阅读方法。
所谓的方便就是自动拼接网页快照链接,就需要用到油猴脚本。不同的浏览器都有油猴插件, Chrome 下有 Tampermonkey,Firefox 下有 Greasemonkey。大家可以自己装上学习一下使用方法。今天我就单说脚本的具体写法。下面的内容假设读者了解 javascript 编程语言,而且熟悉浏览器的 DOM API。
油猴脚本说白了就是特殊的 javascript 脚本。结构如下:
// ==UserScript==
// @name Google Web Cache
// @version 1
// @grant none
// @include https://www.economist.com/*
// @run-at document-end
// ==/UserScript==
function (window) {
(// ...
window); })(
//
开头的注释,但@
开头的有特殊含义。这里最重要的就是@include
。
@include
表示插件运行的范围。比如这里的@include https://www.economist.com/*
表示只在网站www.economist.com
上运行。如果想支持多个网站,可以指定多条@include
。
接下来就是 javascript 程序。(function(window) {})(window);
是 javascript 中的经典套路,意思是把实际代码放到一个函数里立即执行,避免不同油猴脚本相互影响。
我们需要做的就是当鼠标移动到某个链接上的时候,将链接自动修改为谷歌的快照链接。所以核心代码如下:
// 注册 mouseover 事件
document.addEventListener('mouseover', function (event) {
let a = event.target;
// 如果鼠标移动到超链接上 <a>
if (a && a.tagName == 'A') {
// 修改超链接地址
.href = "https://webcache.googleusercontent.com/search?q=cache:"+a.href;
a
}, true); }
将脚本加到油猴插件里,打开经济学人网站后点击任意链接就可以打开对应的网页快照了。
如果你按上面的脚本试验了就会发现有时候会有问题,那是因为经济学人上有些链接是相对链接,并不包含域名等信息。所以我们需要用代码补上这一部分。修改后的代码如下:
// 注册 mouseover 事件
document.addEventListener('mouseover', function (event) {
let a = event.target;
// 如果鼠标移动到超链接上 <a>
if (a && a.tagName == 'A') {
let url = a.href;
// 如果是站内路径则补全域名等信息
if (url.startsWith("/")) {
= a.baseURI + url;
url
}// 修改超链接地址
.href = "https://webcache.googleusercontent.com/search?q=cache:"+url;
a
}, true); }
用上面的脚本就可以自动打开所有网页快照了。祝大家学习愉快😄我自己使用的完整代码如下:
// ==UserScript==
// @name Google Web Cache
// @version 1
// @grant none
// @include https://www.economist.com/*
// @include https://www.theatlantic.com/*
// @run-at document-end
// ==/UserScript==
function (window) {
("use strict";
document.addEventListener('mouseover', function (event) {
let a = event.target, depth = 3;
while (a && a.tagName != 'A' && depth-- > 0) {
= a.parentNode;
a
}
if (a && a.tagName == 'A') {
let url = a.href;
if (url.startsWith("/")) {
= document.URL + url;
url
}if (url.startsWith(document.URL)) {
.href = "https://webcache.googleusercontent.com/search?q=cache:"+url;
a
}
}, true);
}window); })(