前段时间我在公众号发表了一篇推文:「什么?你无法复制百度文库的内容?」,之后我收到了不少小伙伴们的反馈,其中也有一些大神分享了他们的经验和方案,我在这里大概整合了一下,并以最通俗易懂的方式向大家分享这些解除文库复制限制的方案。
本文分享的方案可能更多的是涉及编程方面的,对于不懂编程的小伙伴们,也不需要太紧张,一步步跟着我来,你也是可以做到的!
回顾一下上期提到的四种解除复制限制的方案:
说实话,上一期推荐的这四种方法,没有一种是称得上“有用”的,方案1没有详细说明步骤,方案2并不保证有效,方案3无法复制源格式,方案4简直就是废话。针对上一期中存在的这些不足,我感到很抱歉,在这一期中,我将分享四种新的方案,并且这一期中重点从编程角度出发。
出于对学术文献的巨大需求,很多高校都会跟百度文库进行合作,通过签订相关协议过批量购买的方式给本校学生提供免费的文库下载权力。只要你的电脑 IP 地址处于校园网局域网 IP 段内,你就可以直接免费下载。
那如果人不在学校里,或者已经毕业了呢,该怎么办?很简单,你找一位在学校里的朋友帮你下就好了呀!或者,现在很多大学都是对外人开放的,任何人都可以随意进出校园,你只需带着电脑到你附近的大学逛逛,只要能找到连接校园网的地方,你就可以实现免费下载文库的资源(前提是这个学校有购买文库的下载权),一般情况下大学图书馆都是有开放的校园 WiFi 的。
(该图片由「受伤的拖拉机」提供)
这几年来,可能你时时刻刻都在听别人说着:人工智能时代来临啦!其实我明白,你对人工智能的印象还是比较遥远,你可能认为人工智能还在未来,也可能认为人工智能不在你这个城市,至少你身边还没有普及人工智能。但我要告诉你,其实,人工智能已经来临了,并且就是你我的生活之中随处可见。
你可能已经很久没有再接触到 QQ 了,它是属于你童年时那个非主流时代的,但实际上它还尚未过时。几年前,QQ 发行了一个商务轻量级的版本——TIM,它非常好用,自从我第一次见到 TIM,我就已经爱上它了。
TIM 中有一个很强大的功能,不知你知否?这个强大的功能,可以帮助你将一切纸质的、图片化的资料,变成你可以随意复制和编辑的文本内容,这个功能就是 TIM 的 文档扫描
。利用这个文档扫描功能,我们也能够轻松地获取百度云的不可复制文本。下面我来给你演示一下如何操作。
1. 首先你要在手机上安装 TIM,并且打开它,然后点击下方的 云文件
导航栏菜单,点开右上角 +
号,选择 文档扫描
;
2. 电脑上打开要复制内容的那个文库网页,然后手机对着电脑网页拍照;
3. 拍完照后,拉动四个顶点,调整识别区域;
4. 点击下一步,等待识别,大约两三秒后就可以出结果了;
5. 可以看到,识别准确率还是挺高的,而且这里识别出来的结果,你可以随意复制,也可以保存到云文件里进行编辑。
JavaScript 是一种前端脚本编程语言,你在网页上看到的动画效果、数据交互(例如将网页滚到底部会自动加载新的数据)、用户交互(例如你在注册账号时它能检测你输入的格式对不对)都是由 JavaScript 程序实现的。在现代的很多浏览器中,都会有一个开发者工具(在浏览器中按 F12 键可以召唤它,如下图右侧所示),这个开发者工具让你可以直接使用 JavaScript 编程语言来操作网页。在这个方案中,我们就在浏览器开发者工具上利用 JavaScript 代码来提取出我们想要复制的内容吧!
在对文库进行了一番仔细研究之后,我写了一段代码,用来提取文库的内容,下面是具体的操作步骤,跟着我一步一步来吧:
1. 打开你想要复制内容的那个文库网页;
2. 按下 F12 键召唤我们的强大小助手——开发者工具;
3. 点击开发者工具顶部菜单栏的「Console」选项卡;
4. 如果你是想提取纯文本,请将下面这行代码复制到 Console 的 >
处,并按回车,回车后直接复制得到的文本即可:
document.getElementsByClassName('ie-fix')[0].innerText
5. 如果你想提取带格式的文本,请将下面的代码全部复制到 Console 的 >
处,并按回车;
// 提取需要的内容
var box = document.getElementsByClassName("ie-fix");
var html = box[0].innerHTML;
// 设置新的内容
document.getElementById('doc').innerHTML = html;
// 删掉无相关的元素
[...document.body.getElementsByTagName("div")].forEach((item) => {
if(item.id != 'doc' && item.className != 'tangram-suggestion-main')
item.remove();
});
// 缩放字体、调整位置
[...document.getElementsByTagName('p')].forEach((item) => {
var f_size = item.style.fontSize ? item.style.fontSize : window.getComputedStyle(item).fontSize;
f_size = parseInt(f_size.split('px')[0])*0.1;
var p_top = parseInt(item.style.top.split('px')[0])*0.1;
var p_left = parseInt(item.style.left.split('px')[0])*0.1;
item.style.fontSize = f_size + "px";
item.style.top = p_top + "px";
item.style.left = p_left + "px";
item.style.lineHeight = f_size + "px";
item.style.width = "auto";
item.style.height = "auto";
});
6. 回车之后,就得到我们想要的内容了,这时候还是保持了源格式的,即字体样式那些都还在的;
7. 此时我们在页面中按 Ctrl + A 全选,然后按 Ctrl + C 复制,接着在 Word 里按 Ctrl + V 粘贴;
8. 这回连带格式一起复制到 Word 了。不过仔细看会发现这里有点小问题,这里好像每一句话都被分开了,这其实是百度做的一些小技巧,就是为了不让你复制,就算被你复制了,也不让你复制得完美。不过这个问题不是很大,自己稍加排版一下就好了。
上面介绍了使用原生 JavaScript 脚本来提取我们要复制的内容,但其实百度文库的网页引用了 JQuery 框架,我们可以直接使用 JQuery 选择器来提取,方法跟上面的基本一样,不同的就是你要复制到 Console
那里的代码换成了 JQuery 的代码。
1. 提取纯文本:
$('.ie-fix').text()
2. 提取含有格式的文本:
$('#doc').html($('.ie-fix').html());
$('body div:not(#doc, .tangram-suggestion-main)').remove();
$('p').each(function () {
$(this).css('top', (parseInt($(this).css('top').split('px')[0])*0.1)+'px');
$(this).css('left', (parseInt($(this).css('left').split('px')[0])*0.1)+'px');
$(this).css('fontSize', (parseInt($(this).css('fontSize').split('px')[0])*0.1)+'px');
$(this).css('lineHeight', $(this).css('fontSize'));
});