一、引言
根据相关法律法规,为了保护作者及版权方的正当权益,当当网电子书目前在PC端不支持下载功能,只能在线阅读。若您订购的电子书支持iPhone、iPad、Android、E-ink设备阅读,请您使用当当读书客户端登陆您的当当账户,之后点击页面左上角图书下载按钮,之后页面中会显示您已购买未下载的图书,请您点击下载即可。
当当云阅读是当当网旗下的电子书阅读平台,具有丰富的正版图书资源。为了保护读物作者和版权方的正当权益,应最大限度地防止相关电子书在互联网上非法传播。当当云阅读在PC端不支持下载,只能在线阅读;在智能手机、平板上需安装当当云阅读客户端进行在线阅读或缓存。
但对大多数用户来说,仅仅能够阅读是不够的,在阅读过程中做批注、摘录等是常有的阅读习惯,但当当云阅读禁止用户复制、粘贴电子书内容,更不能导出到其他阅读器上。如果用户想要快速提取其内容,唯一的解决办法是:截取屏幕存为图片,然后使用OCR工具识别文字,手动校正误识点。——提取量少时这很有效,但如果想要获取章节乃至整本书籍,这就累死傻小子了。
本文对当当云阅读PC端对电子书的保护方式展开研究,提出了一种比传统OCR更高效的电子书内容提取方案:无需截屏、OCR识别、手动校正,并保证提取内容的准确度为100%。基本思路是:
-
利用网络爬虫模拟登录云阅读网站以获取Cookies信息;
-
”破解“云阅读页面文字的反爬取策略;
-
解析数据并批量保存文字内容。
本文提供的内容仅用于学习研究,请勿用于非法用途,否则后果自负。
二、分析过程
2.1 页面api解析
打开一本电子书,其链接如下:
http://e.dangdang.com/pc/reader/index.html?id=1901168632
打开浏览器的网络调试工具或其他抓包程序,点击翻页获取到页面载入的API:
GET http://e.dangdang.com/media/api.go
Query String Parameters:
action getPcChapterInfo epubID 1901168632 电子书id permanentId 20210416104157326126993695645533813 商品id consumeType 1 platform 3 deviceType Android deviceVersion 5.0.0 channelId 70000 platformSource DDDS-P fromPaltform ds_android deviceSerialNo html5 clientVersionNo 5.8.4 token chapterID 2 章节 pageIndex 1 章节页码 locationIndex 4 全局页码 wordSize 2 style 2 autoBuy 0 chapterIndex
其中关键参数有:chapterID、pageIndex、locationIndex,在批量爬取时按照章节、页码顺序遍历。
API返回内容:
{
"data": {
"chapter": {
},
"chapterInfo": {
"status": "ok",
"code": 0,
"pageType": 0,
"snippet": "......"
},
"systemDate": "1618485378339",
"currentDate": "2021-04-15 19:16:18",
"wordSize": 2
},
"systemDate": 1618485378339,
"status": {
"code": 0
}
}
snippet
字段内容是HTML标签,这些标签经过浏览器渲染构成了页面文字,内容截取如下:
<div class="wraper" style="width: 660px; height: 880px; position: absolute; left:0px; top:0px; overflow: hidden; ">
<div class="text" style="width: 660px; height: 880px; position: absolute; left:0px;